嵌套查询1
由内向外处理进行多层查询
SELECT Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno='2');
上层是外层查询或父查询,下层是内层查询或子查询。
子查询的SELECT语句中不能使用ORDER BY子句
- 带有IN的子查询
- 带有比较运算符的子查询
例1、找出每个学生超过自己选修课程平均成绩的课程号
SELECT Sno,Cno
FROM SC x
WHERE Grade>=(SELECT AVG(Grade))
FROM Student
WHERE Sname='刘晨');
- 带有EXISTS的子查询
EXISTS代表存在量词,不返回任何数据,会产生逻辑真值和假值。
数据更新
- 插入元组
INSERT
INTO <表名>[<属性列>,<属性2>]
VALUES(<常量1>,<常量2>);
INSERT
INTO Student(Sno,Sname,Ssex,Sdept)
VALUES('201215128','陈东','男');
- 插入子查询结果
INSERT
INTO<表名>(<属性列1>,<属性列2>)
子查询;
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
修改数据
UPDATE <表名>
SET<列名>=<表达式>,[<列名>=<表达式>]
[WHERE<条件>]
- 修改某一个元组的数据
UPDATE Student
SET Sage=22
WHERE Sno='201215121'
- 修改多个元组的数据
UPDATE Student
SET Sage=Sage+1
- 带子查询的修改语句
UPDATE SC
SET Grade=0
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept='CS')
删除数据
DELETE
FROM <表名>
[WHERE <条件>]
带子查询的删除语句
DELETE
FROM SC
WHERE SNO IN
(SELECT Sno
FROM Student
WHERE Sdept='CS')