数据库中的EXISTS语句

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
.... .... ....
这里只展示了学号为1的学生选课信息。 第一条select语句是为了获取所有学生的学号 第二个select语句是为了获取所有的选修课程 第三条select语句是为了比较当前学号学生是否与选修课程相等。如果相等第二个not exists语句返回True,故第二个not exist语句返回False,因此不打印这个学生的学号。
例二、查询至少选修了学生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))
发布了49 篇原创文章 · 获赞 18 · 访问量 1418

猜你喜欢

转载自blog.csdn.net/qq_44099721/article/details/103738606