常用的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 Classid From tb_Expo_Class Where ParentID=0
等价于:
而Exist不同:
其执行类似于下面的sql:
在查询数据量大的时候就会体现出效率来。
当然,也不能说Exist就比In好。
如果
Select 0 from tb_expo_class where parentid=0
查询出来的数据量很少的话,还是 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 效率更高些。
相关文章推荐
- sql语句中in与exist not in与not exist 的区别
- sql语句中in与exist not in与not exist 的区别
- 关于in 和 exist 的区别-------------近期优化sql 语句的时候再次碰到
- sql中in和exist语句的区别
- sql中in和exist语句的区别
- SQL语句中in和exists的区别
- SQL中exist与in的区别
- 常用SQL与ACCESS数据查询语句的区别
- Sql语句中IN和exists的区别及应用
- sql中的in 和 exist 区别
- sql中exist与in的区别
- sql中exist与in 的区别
- sql优化,in与exist , not in与not exist 的区别
- sql中exist与in的区别
- sql中exist与in 的区别
- sql查询语句中 in和 exists的区别与性能比较
- 常用SQL查询语句 Oracle中Union,Union All,Intersect,Minus的有什么区别
- SQL 语句中的in、find_in_set、like的区别
- sql 中in与exist语句的区别
- sql中的exist 和in 的区别