现在的位置: 首页 > 综合 > 正文

高级sql学习——exists和not exists的使用!!!

2013年01月20日 ⁄ 综合 ⁄ 共 1587字 ⁄ 字号 评论关闭

1. exists的使用

Exists 用于只能用于子查询,可以替代in,若匹配到结果,则退出内部查询,并将条件标志为true,传回全部结果资料。in 不管匹配到匹配不到都全部匹配完毕,使用exists 可以将子查询结果定为常量,不影响查询效果,而且效率高。

In和exists对比:若子查询结果集比较小,优先使用in,若外层查询比子查询小,优先使用exists。因为若用in,则oracle 会优先查询子查询,然后匹配外层查询,若使用exists,则oracle 会优先查询外层表,然后再与内层表匹配。最优化匹配原则,拿最小记录匹配大记录。

(这里使用的是oracle数据库自带的测试表emp和dept)

使用in:

使用exists:

结果:

2 not exists的使用

与exists 含义相反,也在子查询中使用,取出不满足条件的,与not in有一定的区别,注意有时候not exists不能完全替代not in。

 

3.not exists和not in不同的情况:

抱歉!评论已关闭.