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的查询效率高。