分享

SQL中EXISTS用法

 修行的嘟嘟 2012-07-30

EXISTS 是判断是否存在,和in类似,但效率要比in高

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')

这两句效果一样


EXISTS或者NOT EXISTS是把主查询的字段传到后边的查询中作为条件,返回值是TRUE或者FALSE。EXISTS TRUE,那么就是查询条件成立,结果会显示出来。NOT EXISTS TRUE,则为FALSE,查询连接条件不成立。
select * from course where not exists(select * from grade where grade.课程代号=course.课程代号)     
这个语句,是查询course表中课程代号在grade中没有出现的数据。
看看grade表,课程编号有K01到K06,而COURSE表,有K01到K07,那么K07在GRADE表是不存在的,那么,是符合条件的。
同样select * from course where exists(select * from grade where grade.课程代号=course.课程代号) 
则是查询COURSE的记录条件为编号在GRADE中存在。那么很明显,结果是K01到K06的数据。
另外,EXISTS和NOT EXISTS的作用可以用IN或NOT IN实现,但是,效率要高。
因为EXISTS和NOT EXISTS返回的结果是TRUE或者FALSE,那么则在子查询中,遇到第一个符合条件的结果,就会退出查询,而不会进行全表的检索。而NOT IN或者IN,要把子查询中的SELECT字句全部查询出来才行。
 
EXISTS检查是否有结果,判断是否有记录,返回的是一个布尔型(TRUE/FALSE)。
IN是对结果值进行比较,判断一个字段是否存在于几个值的范围中,所以 EXISTS 比 IN 快。

绝对的认为exists比in效率高的说法是不准确的。这要看关联表的数据量大小.
  如果查询的两个表大小相当,那么用in和exists差别不大。
  如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
 

比较使用 EXISTS 和 IN 的查询

  例如:表A(小表),表B(大表)
  1:
  select * from A where cc in (select cc from B)
  效率低,用到了A表上cc列的索引;
  select * from A where exists(select cc from B where cc=A.cc)
  效率高,用到了B表上cc列的索引。
  相反的
  2:
  select * from B where cc in (select cc from A)
  效率高,用到了B表上cc列的索引;
  select * from B where exists(select cc from A where cc=B.cc)
  效率低,用到了A表上cc列的索引。
  not in 和not exists
  如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;
  而not exists 的子查询依然能用到表上的索引。
  所以无论那个表大,用not exists都比not in要快。
  in 与 =的区别
  select name from student where name in ('zhang','wang','li','zhao');
  与
  select name from student where name='zhang' or name='li' or name='wang' or name='zhao'
  的结果是相同的。
  示例:查询表1中在表2中是否按FID是否存在。
  select * from 表名 T1
  where exists
  (select FID from 表名 T2 where T1.fid=T2.fid)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多