Exist和join的区别

0
create table a(
TimeID int,
[Time] datetime,
Name varchar(100))
 
insert into a(TimeID,Time,Name) values(20110112,2012-10-01,'a'),(20110113,2012-10-02,'b'),(20110114,2012-10-03,'c'),(20110115,2012-10-04,'d'),(20110112,2012-10-11,'a')
--Test1
select a1.Name
from a as a1
where exists(
select Null from a as a2
where a2.TimeID<20110113
and a2.Time>20-12-10-02
and a1.TimeID=a2.TimeID
)
 
--Test2
select a2.Name
from a as a2
where a2.TimeID<20110113
and a2.Time>20-12-10-02
 
--请问Test1和Test2这两个查询有什么区别么,查询结果好像是相同的,其查询效率或者查询方式等的区别是什么。
已邀请:
2

梁勇 - 天道酬勤、上善若水。爱好商业智能 2015-08-11 回答

没有啥区别,效果一样的。
查询效率的话:表设计、数据量、选择性不同都会对结果产生影响,具体的还要看执行计划。EXISTS和IN可以比较,JOIN虽然结果一样,但步骤是不一样的,单就“查询A表中在(或不在)B表中的记录”这个需求,在比较字段都有合适的索引的情况下,如果B表的数据量较大A表较少,可以考虑用EXISTS;反之可以考虑用IN。

要回复问题请先登录注册