一 .概念
in 查询返回一个列表,提供的列表给外查询使用
exit 是对自查询进行判断是否存在行,存在则 true,不存在则为 false
for x in ( select * from t1 )
loop
if ( exists ( select null from t2 where y = x.x )
then
OUTPUT THE RECORD!
end if
end loop
二.使用性能
1. 如果查询的两个表大小差不多,则使用in和exit性能差不多
2. 外表大,内表小 使用 in 效率高
3. 外表小,内表大 使用 exits 效率高
总结:EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用,例如:如果是确定且有限的集合时,可以使用,比如:(1,2,3,4,5)
三.注意(如果在not in子查询中有null值的时候,则不会返回数据)
not in 需要有null的数据 出现奇怪情况
举例子:
1. 数据:
create table student(
id int,
`name` varchar(100)
);
create table detail(
id int,
address varchar(100)
);
insert