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-Sage
FROM Student;
查询并用小写字母表示所有系
SELECT Sname,LOWER(Sdept)
FROM Student;
指定别名改变查询结果列标题
SELECT Sname NAME,2004-Sage BIRTHDAY
FROM Student;
4.取消查询结果中重复的行
SELECT DISTINCT Sno
FROM SC;
5.查询计算机科学系全体学生的名单
SELECT Sname
FROM Student
WHERE Sdept='CS';
查询时对全表进行扫描,取出一个元组,检查该元组在Sdept列的值是否等于CS。如果相等,取出来,否则,取下一个元组。
若在Sdept上建立索引,系统会利用该索引找出计算机系的元组,避免了全表的扫描,加快查询速度。但如果学生较少,不一定能提高查询效率。
查询不及格学生的学号,多门功课不及格,学号只列一次
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;
查询年龄在20-23岁学生的姓名
SELECT Sname,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
查询计算机系,数学系,信息系学生的姓名和性别
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN (' CS', 'MA', ' IS');
6.字符串匹配 LIKE
匹配的字符串可以是一个完整的字符串,也可以是含有通配符%和_
%:代表任意长度的字符串 a%b代表以a开头,以b结尾任意长度的字符串
_:代表任意的单个字符
查找姓刘的同学的姓名,学号和性别
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE '刘 %';
注意:一个汉字占两个字符 例如 ‘_ _ 阳%’是查找第二个字为阳的学生
ESCAPE ‘\’ 表示“\”为换码字符
SELECT Cno ,Ccredit
FROM Course
WHERE Cname LIKE 'DB\_Design' ESCAPE '\';
7.查询为空值
查询没有参加考试的学生的学号和课程号
SELECT Sno,Cno
FROM SC
WHERE Grade IS NULL;
8.使用ORDER BY 对查询结果进行排序
按照系号升序年纪降序进行排序
SELECT Sno ,Grade
FROM SC
WHERE Cno=‘3’
ORDER BY Sdept, Grade DESC;
9.聚集函数 WHERE句子不能用聚集函数作为条件表达式
COUNT 统计个数
SUM 计算一列值的总和
AVG 计算一列值的平均值
查询学生总人数
SELECT COUNT (*)
FROM Student ;
求各个课程号及相应的选课人数
SELECT Cno,COUNT (Sno)
FROM SC
GROUP BY Cno;
查询选了3门以上课程学生学号
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>3
WHERE 和HAVING区别在于作用对象不同,WHERE作用于基本表或视图,从中选择满足条件元组。HAVING作用于组,从中选择满足条件的组。
11.连接查询 LEFT OUT JOIN 左外连接
SELECT Student.* ,SC.*
FROM Student ,SC
WHERE Student.Sno=SC.Sno;
12.嵌套查询
一个SELECT-FROM-WHERE语句为一个查询块,将一个查询块放在另一个查询块的WHERE或HAVING短语的条件中的查询称为嵌套查询
SELECT Sname
FROM Student
WHERE Sno IN
( SELECT Sno
FROM SC
WHERE Cno='2');
子查询不能使用ORDER BY子句,排序只能对最终查询结果排序
子查询一定要跟在比较符之后。
不相关查询:子查询不依赖于父查询
相关查询:子查询依赖于父查询
13.找出每个学生超过他选修课程平均成绩的课程号
SELECT Sno,Cno
FROM SC x
WHERE 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 Student
GROUP BY Sdept;
17.修改数据 UPDATA
UPDATA Student
SET Sage=22
WHERE Sno='20215111';
18.删除数据 DELETE
DELETE
FROM Student
WHERE Sno=‘202111’;
删除所有学生选课记录
DELETE
FROM SC;
19.视图
视图是从一个或几个基本表导出的表,与基本表不同的是,是一个虚表。数据库中只存放视图的定义,不存放视图对应的数据
(1)建立视图
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept=‘IS’
WITH CHECK OPTION 表示对视图进行更新插入删除时满足视图定义的条件
(2)删除视图
DROP VIEW <视图名> [CASCADE] 删除视图及导出的所有视图