数据库语言---SQL基本用法2(查询)

来源:互联网 发布:网络舆论战 编辑:程序博客网 时间:2024/04/26 07:22

1.

SELECT  [ALL | DISTINCT]  <目标列表达式>FROM <表名或视图名>[WHERE <条件表达式>][GROUP BY [列名1]  [HAVING  <条件表达式>]][ORDER BY <列名2>  [ASC | DESC]];

根据WHERE子句条件表达式,从FROM指定的基本表或视图中找出满足条件的元组

如果有GROUP BY ,则将结果按照列名值进行分组,该列值相等的为一组。如果GROUP BY 带有HAVING,只有满足指定条件的组才会输出。

如果有ORDER BY ,则结果按照列名值进行排序。

2.查询指定列

SELECT Sno,Sname   FROM Student;
查询全部列;SELECT *FROM Student;

3.查询经过计算的值

SELECT Sname,2004-SageFROM Student;

查询并用小写字母表示所有系

SELECT Sname,LOWER(Sdept)FROM Student;

指定别名改变查询结果列标题

SELECT Sname NAME,2004-Sage  BIRTHDAYFROM Student;

4.取消查询结果中重复的行

SELECT DISTINCT SnoFROM SC;

5.查询计算机科学系全体学生的名单

SELECT SnameFROM StudentWHERE Sdept='CS';

查询时对全表进行扫描,取出一个元组,检查该元组在Sdept列的值是否等于CS。如果相等,取出来,否则,取下一个元组。

若在Sdept上建立索引,系统会利用该索引找出计算机系的元组,避免了全表的扫描,加快查询速度。但如果学生较少,不一定能提高查询效率。

查询不及格学生的学号,多门功课不及格,学号只列一次

SELECT DISTINCT SnoFROM SCWHERE Grade<60;

查询年龄在20-23岁学生的姓名

SELECT Sname,SageFROM StudentWHERE Sage BETWEEN   20  AND 23;

查询计算机系,数学系,信息系学生的姓名和性别

SELECT Sname,SsexFROM StudentWHERE Sdept IN (' CS', 'MA', ' IS');

6.字符串匹配 LIKE

匹配的字符串可以是一个完整的字符串,也可以是含有通配符%和_

%:代表任意长度的字符串 a%b代表以a开头,以b结尾任意长度的字符串

_:代表任意的单个字符

查找姓刘的同学的姓名,学号和性别SELECT Sname,Sno,SsexFROM StudentWHERE Sname LIKE '刘 %';   

注意:一个汉字占两个字符 例如 ‘_ _ 阳%’是查找第二个字为阳的学生

ESCAPE ‘\’ 表示“\”为换码字符

SELECT Cno ,CcreditFROM CourseWHERE Cname LIKE 'DB\_Design' ESCAPE '\';

7.查询为空值

查询没有参加考试的学生的学号和课程号

SELECT Sno,CnoFROM SCWHERE Grade IS NULL;

8.使用ORDER BY 对查询结果进行排序

按照系号升序年纪降序进行排序

SELECT Sno ,GradeFROM SCWHERE Cno=‘3ORDER BY Sdept, Grade DESC;

9.聚集函数 WHERE句子不能用聚集函数作为条件表达式

COUNT 统计个数

SUM 计算一列值的总和

AVG 计算一列值的平均值

查询学生总人数

SELECT COUNT (*)FROM Student ;
  1. GROUP BY 查询结果按某一列或多列的值分组,值相等的为一组
求各个课程号及相应的选课人数SELECT Cno,COUNT (Sno)FROM SCGROUP BY Cno;

查询选了3门以上课程学生学号

SELECT SnoFROM SCGROUP BY SnoHAVING COUNT(*)>3

WHERE 和HAVING区别在于作用对象不同,WHERE作用于基本表或视图,从中选择满足条件元组。HAVING作用于组,从中选择满足条件的组。

11.连接查询 LEFT OUT JOIN 左外连接

SELECT Student.* ,SC.*FROM Student ,SCWHERE Student.Sno=SC.Sno;

12.嵌套查询
一个SELECT-FROM-WHERE语句为一个查询块,将一个查询块放在另一个查询块的WHERE或HAVING短语的条件中的查询称为嵌套查询

SELECT SnameFROM StudentWHERE  Sno IN  ( SELECT Sno   FROM SC   WHERE Cno='2');

子查询不能使用ORDER BY子句,排序只能对最终查询结果排序
子查询一定要跟在比较符之后。
不相关查询:子查询不依赖于父查询
相关查询:子查询依赖于父查询
13.找出每个学生超过他选修课程平均成绩的课程号

SELECT Sno,CnoFROM SC xWHERE Grade>=(SELECT AVG (Grade)                               FROM SC y                               WHERE  y.Sno=x.Sno);

x是表SC的别名,又称为元组变量,可以用来表示SC的一个元组。内层查询是求一个学生所有选修课程平均成绩的,至于哪个学生的平均成绩要看x.Sno,该值与父查询相关的,因此这类查询称为相关子查询。
14.带有EXISTS谓语的子查询
带有EXISTS谓语的子查询不返回任何数据,只产生逻辑的真或假
15.集合查询
集合操作主要包括并操作UNION ,交操作INTERSECT和差操作EXCEPT
并操作会自动去掉重复元组,如果保留重复元组使用UNION ALL操作符
16.插入元组 INSERT INTO 插入的属性列中没有出现的元组,新元组的这些列上将取空值

INSERT INTO Student (Sno ,Sname,Ssex,Sdept,Sage)VALUES('200215128','陈东',‘男’,‘IS’,‘18’)

字符串常数用单引号括起来
插入子查询结果

INSERT INTO Dept_age(Sdept,Avg_age)SELECT Sdept,AVG(Sage)FROM StudentGROUP BY Sdept;

17.修改数据 UPDATA

UPDATA StudentSET Sage=22WHERE Sno='20215111';

18.删除数据 DELETE

DELETEFROM StudentWHERE Sno=‘202111’;

删除所有学生选课记录
DELETE
FROM SC;
19.视图
视图是从一个或几个基本表导出的表,与基本表不同的是,是一个虚表。数据库中只存放视图的定义,不存放视图对应的数据
(1)建立视图

CREATE VIEW IS_StudentASSELECT Sno,Sname,SageFROM StudentWHERE Sdept=‘IS

WITH CHECK OPTION 表示对视图进行更新插入删除时满足视图定义的条件
(2)删除视图

DROP VIEW <视图名> [CASCADE]   删除视图及导出的所有视图
0 0
原创粉丝点击