SQL语句中EXISTS的使用详解及示例 |
您所在的位置:网站首页 › ‖sql中什么意思 › SQL语句中EXISTS的使用详解及示例 |
EXISTS怎么用?
EXISTS和NOT EXISTS子句的返回值是一个BOOL值。 EXISTS内部有一个子查询语句(SELECT … FROM…), 我将其称为EXIST的内查询语句。其内查询语句返回一个结果集。EXISTS子句根据其内查询语句的结果集空或者非空,返回一个布尔值。 一种通俗的可以理解为:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。 EXISTS的几个查找练习有三张表,分别是 学生表(S),课程表(C)和选课中间表(SC) 也就是说要查zs这个学生 可以转换为:查询没有一门课没有被该生选择的学生的学号和姓名 select S,SNAME -- 在 S 表里选 S,SNAME from S where not exists -- 不存在 (select * -- 课程 from C where not exists -- 没有 (select * -- 被该生选择的课程 from SC where SC.S=S.S and SC.C=C.C)) -- 相关查询,三个表进行连接 问题2、查找没全选的学生的姓名也就是说要查ls和ww 可以转换为:查询存在课程没有被该生选择的学生的学号和姓名 select S,SNAME -- 在 S 表里选 S,SNAME from S where exists -- 存在 (select * -- 课程 from C where not exists -- 没有 (select * -- 被该生选择的课程 from SC where SC.S=S.S and SC.C=C.C)) -- 相关查询,三个表进行连接 问题3、查找至少选了一个的学生的姓名也就是说要查zs和ls 可以转换为:查询存在一门课被该生选择的学生的学号和姓名 select S,SNAME -- 在 S 表里选 S,SNAME from S where exists -- 存在 (select * -- 课程 from C where exists -- 有 (select * -- 被该生选择的课程 from SC where SC.S=S.S and SC.C=C.C)) -- 相关查询,三个表进行连接 问题4、查找全没选的学生的姓名也就是说要查ww 可以转换为:查询不存在一门课被该生选择的学生的学号和姓名 select S,SNAME -- 在 S 表里选 S,SNAME from S where not exists -- 不存在 (select * -- 课程 from C where exists -- 有 (select * -- 被该生选择的课程 from SC where SC.S=S.S and SC.C=C.C)) -- 相关查询,三个表进行连接 总结上述几个问题,其实解题思维是一样的,都是运用了两次 EXISTS 或 NOTEXISTS 混合来对查询进行约束。理解了这几个问题,再遇到相似的问题,就可以进行相应的转化来解决了。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |