一、含EXISTS的简单子查询
SELECT Sname
FROM Student
WHERE EXISTS
(SELECT *
FROM SC
WHERE Sno=Student.Sno AND Cno='1');
在上述例子中,查询过程如下:
首先取外层查询中Student表的第一个元组,根据它与内层查询相关的属性值(Sno值)处理内层查询,若WHERE子句返回值为真,则取外层查询中该院组的Sname放入结果表
然后再取Student表的下一个元组
重复这一过程,直至外层Student表全部检查完为止
若有以下表:
Student表:
学号Sno | 姓名Sname | 性别Ssex | 年龄Sage | 所在系Sdept |
---|---|---|---|---|
1 | 李勇 | 男 | 20 | CS |
2 | 刘晨 | 女 | 19 | CS |
3 | 王敏 | 女 | 18 | MA |
4 | 张立 | 男 | 19 | IS |
SC表:
学号Sno | 课程号Cno | 成绩Grade |
---|---|---|
1 | 1 | 92 |
1 | 2 | 85 |
1 | 3 | 88 |
2 | 2 | 90 |
2 | 3 | 80 |
则具体过程如下:
首先取第一个数据
学号Sno | 姓名Sname | 性别Ssex | 年龄Sage | 所在系Sdept |
---|---|---|---|---|
1 | 李勇 | 男 | 20 | CS |
在表SC中找符合Sno=1且Cno=1的数据,有符合条件的元组,则子查询返回1,该元组加入结果中
对后续元组类似处理