您的位置:首页 > 数据库

常用的SQL语句(三) - In与Exist的区别

2011-02-24 11:59 246 查看
In ------ 遍历

Exists ------- 检索到满足条件即退出

Not Exists --------检索到不满足条件即退出

本质区别:

Exists 由于Exist属于外驱动,故会利用索引来检索数据

In 则属于内驱动 故不能利用索引检索数据

其中,In和Not In类似全表扫描,效率低,一般用 Exist和NotExist代替其用法。

使用环境:

*Exists 使用外连接查询时用到。

*In 使用内连接查询时用到。

e.g.:

In 的用法:

Select Top 10 ExpoName,ExpoClassID
From tb_Expo
Where ExpoClassID in (Select Classid From tb_Expo_Class Where ParentID=0)


其中,先执行 Select Classid From tb_Expo_Class Where ParentID=0

等价于:

Select Top 10 a.ExpoName From tb_Expo a,
(select Classid from tb_expo_class where parentid=0) b
Where a.ExpoClassID= b.ClassID


而Exist不同:

select top 10 ExpoName,ExpoClassID from tb_Expo e
where Exists (select 0 from tb_expo_class where parentid=0)


其执行类似于下面的sql:

set   serveroutput  on;
declare
l_count   integer;
begin
for tb_Expo  in (Select   ExpoName,ExpoClassID   From  tb_Expo)   loop
Select count(*) into l_count From tb_Expo_Class
where parentid = 0

if l_count != 0 then
dbms_output.put_line(e.ExpoName);
end if;

end loop;
end


在查询数据量大的时候就会体现出效率来。

当然,也不能说Exist就比In好。

如果

Select 0 from tb_expo_class where parentid=0

查询出来的数据量很少的话,还是 In 效率更高些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: