A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张鑫 黑马帝   /  2011-7-25 20:02  /  2417 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 继续等待马友们的回答!

查看全部评分

5 个回复

倒序浏览
黑马网友  发表于 2011-7-26 11:59:24
沙发
exists是用来判断是否存在的,当exists(查询)中的查询存在结果时则返回真,否则返回假。not exists则相反。
exists做为where 条件时,是先对where 前的主查询询进行查询,然后用主查询的结果一个一个的代入exists的查询进行判断,如果为真则输出当前这一条主查询的结果,否则不输出。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-26 12:03:39
藤椅
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]他们的结果一样

评分

参与人数 1技术分 +2 收起 理由
admin + 2 不错!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-26 12:40:23
板凳
…………………………
回复 使用道具 举报
黑马网友  发表于 2011-7-26 13:36:47
报纸

回复 楼主 的帖子

这问题我感觉没什么必要纠结的。。。逻辑很简单啊,子查询判断条件,exists筛选出存在或者不存在的数据。一条一条语句分析就简单了
回复 使用道具 举报
黑马网友  发表于 2011-7-26 14:27:26
地板
求不用exists的解法!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马