EXISTS语句的语法:
1、当EXISTS语句中的查询结果为非空时返回值为True
2、当EXISTS语句中的查询结果为空时返回值为False
EXISTS语句在关系代数中表示存在。
什么时候使用EXISTS语句:
1、首先要明确在sql server中带有IN谓词,比较运算符的查询语句都可以转换成EXISTS语句。如果你EXISTS语句用的熟练的话可以首先使用它,如果不太熟的话就最后使用。
2、要查询语句中有“全部”等表达任意意思的词一般都使用EXISTS语句查询。(主要思想就是否定再否定)。
例题:
例一、查询选修了全部课程的学生姓名
可以将其转换成不存在有课程没有选。然后根据语义写出sql 语句。
select Sname from Student where not exists(select * from Course where not exists (select * from SC where Student.Sno=SC.Sno and SC.Cno=Course.Cno))
如果这样不好理解的话,还可以这样理解!
EXISTS语句的嵌套查询可以理解为左外连接!!
</tbody>
Student.Sno | Course.Cno | SC.Cno |
---|---|---|
1 | 1 | 1 |
1 | 2 | 2 |
1 | 3 | NULL |
1 | 4 | NULL |
.... | .... | .... |
例二、查询至少选修了学生201215122选修的全部课程的学生学号
select Sno from SC scx where not exists(select * from SC scy where scy.Sno='201215122' and not exist (select * from SC scz where scx.Sno=scz.Sno and scz.Cno=scy.Cno))