黑马程序员技术交流社区

标题: SQL中的exists [打印本页]

作者: 张鑫    时间: 2011-7-25 20:02
标题: SQL中的exists
SQL中的exists我至今不理解怎么用啊!
不要简单地说表示结果是否存在,这样太抽象了!

比如那个经典例子——查询选修了全部课程的学生信息!

有Student  ,  Course  ,  SC 这三个表!

select Sname from student
                           where NOT exists      
                              (select * from course
                               where NOT exists      
                                (select * from SC where
                                    Sno = student.sno and cno = Course.Cno))   

通俗一点讲下吧!
这个问题有没有其他解法?小生实在想不出了……谢谢!
[ 本帖最后由 张鑫 于 2011-07-26  01:06 编辑 ]
作者: 匿名    时间: 2011-7-26 11:59
exists是用来判断是否存在的,当exists(查询)中的查询存在结果时则返回真,否则返回假。not exists则相反。
exists做为where 条件时,是先对where 前的主查询询进行查询,然后用主查询的结果一个一个的代入exists的查询进行判断,如果为真则输出当前这一条主查询的结果,否则不输出。
作者: 匿名    时间: 2011-7-26 12:03
EXISTS 是判断是否存在,和in类似,但效率要比in高[code=sql]SELECT * FROM  EMP (基础表)  WHERE  EMPNO > 0  AND  EXISTS (SELECT ‘X'  FROM DEPT  WHERE  DEPT.DEPTNO = EMP.DEPTNO  AND  LOC = ‘MELB')

SELECT  * FROM  EMP (基础表)  WHERE  EMPNO > 0  AND  DEPTNO IN(SELECT DEPTNO  FROM  DEPT  WHERE  LOC = ‘MELB')[/code]他们的结果一样
作者: 匿名    时间: 2011-7-26 12:40
…………………………
作者: 匿名    时间: 2011-7-26 13:36
标题: 回复 楼主 的帖子
这问题我感觉没什么必要纠结的。。。逻辑很简单啊,子查询判断条件,exists筛选出存在或者不存在的数据。一条一条语句分析就简单了
作者: 匿名    时间: 2011-7-26 14:27
求不用exists的解法!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2