SQL 中的 EXISTS , NOT EXISTS , IN , NOT IN的使用方法

1. EXISTS 和 NOT EXISTS

使用 EXISTS 和 NOT EXISTS 引入的子查询可用于两种集合原理的操作:交集与差集。两个集合的交集包含同时属于两个原集合的所有元素。

差集包含只属于两个集合中的第一个集合的元素。

SELECT * FROM AATEST A WHERE EXISTS (SELECT 1 FROM ABTEST B WHERE A.ID=B.ID);

“exists(xxx)”就表示括号里的语句能不能查出记录,它要查的记录是否存在。因此“select 1”这里的 "1"其实是无关紧要的,换成“*”也没问题,它只在乎括号里的数据能不能查找出来,是否存在这样的记录,如果存在,这里的where 条件成立。

2.IN 和 NOT IN

IN:确定给定的值是否与子查询或列表中的值相匹配。
IN 关键字使您得以选择与列表中的任意一个值匹配的行。
IN 关键字之后的项目必须用逗号隔开,并且括在括号中。

NOT IN:通过 NOT IN 关键字引入的子查询也返回一列零值或更多值。

IN:后面只能是对单列:SELECT * FROM AATEST WHERE ID IN (SELECT ID FROM ABTEST);

这里的“in”后面括号里的语句搜索出来的字段的内容一定要相对应,一般来说,AATEST 和ABTEST这两个表的ID字段表达的意义应该是一样的,否则这样查没什么意义。

 


3.两者的区别:
EXISTS:后面可以是整句的查询语句如:SELECT * FROM AATEST A WHERE EXISTS (SELECT 1 FROM ABTEST B WHERE A.ID=B.ID);

           AATEST数据量小而ABTEST 数据量非常大时,AATEST<<ABTEST 时,EXISTS的查询效率高。

IN:后面只能是对单列:SELECT * FROM AATEST WHERE ID IN (SELECT ID FROM ABTEST);

           AATEST数据量非常大而ABTEST 数据量小时,AATEST>>ABTEST 时,IN的查询效率高。

 

posted on 2011-11-04 10:12  青紫蓝兔  阅读(2548)  评论(0编辑  收藏  举报

导航