sql语句中的exists和in
2012-07-30 14:26
309 查看
有两张表:testA和testB:
testA testB
有如下三条sql语句,他们的结果是否一样呢?
1、select testA.A form testA where testA.A in (select B from testB);
2、select testA.A select * from testA where exists (select B from testB);
3、select testA.A from testA,testB where testA.A= testB.B;
查询结果:
1、1,2
2、1,2,3
3、1,1,2
其区别在于:
1、in和exists在不考虑效率的情况下是可以相互转换到。对于sql1语句,可以转换成的exists语句为
select testA.A from testA where exists (select B from testB where testB.b=testA.a);
可见语句2中少了子查询中的where限制条件;
2、1和3又与哦什么区别呢?
对于语句1执行过程是这样的:首先执行子查询,查询结果为testB.B(1,1,2,4);然后遍历testA中的
A字段的数据是否在刚才的查询结果中,显然1和2在子查询结果中。所以整条语句的结果为1和2.
而语句三呢.查询时先得到两个数据表的笛卡尔积:
A C A B
1 A 1 1
1 A 2 1
1 A 3 2
2 B 1 1
…………………………
然后比较该笛卡尔积中的第一个A和B字段是否相等,相等则取出A字段。所以查询结果为1,1,2。
附:in和exists的区别:
参见:http://kenshin54.iteye.com/blog/366043
testA testB
有如下三条sql语句,他们的结果是否一样呢?
1、select testA.A form testA where testA.A in (select B from testB);
2、select testA.A select * from testA where exists (select B from testB);
3、select testA.A from testA,testB where testA.A= testB.B;
查询结果:
1、1,2
2、1,2,3
3、1,1,2
其区别在于:
1、in和exists在不考虑效率的情况下是可以相互转换到。对于sql1语句,可以转换成的exists语句为
select testA.A from testA where exists (select B from testB where testB.b=testA.a);
可见语句2中少了子查询中的where限制条件;
2、1和3又与哦什么区别呢?
对于语句1执行过程是这样的:首先执行子查询,查询结果为testB.B(1,1,2,4);然后遍历testA中的
A字段的数据是否在刚才的查询结果中,显然1和2在子查询结果中。所以整条语句的结果为1和2.
而语句三呢.查询时先得到两个数据表的笛卡尔积:
A C A B
1 A 1 1
1 A 2 1
1 A 3 2
2 B 1 1
…………………………
然后比较该笛卡尔积中的第一个A和B字段是否相等,相等则取出A字段。所以查询结果为1,1,2。
附:in和exists的区别:
参见:http://kenshin54.iteye.com/blog/366043
相关文章推荐
- LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
- LINQ体验(7)――LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
- sql查询语句中 in和 exists的区别与性能比较
- LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
- UNION,EXISTS,IN等在SQL语句中的灵活应用和场境的选择。
- LINQ to SQL语句(7)之Exists/In/Any/All/Contains
- LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
- sql查询语句的优化,exists与in的更换
- sql语句中exists和in用法的区分
- sql to entity in 语句, top语句, exists语句的写法
- 【转】【收藏】- LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
- sql语句in和exists的效率
- LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
- 在sql语句多表连接中,in、exists、join那个效率更高一点
- 如何用外部程序优化SQL语句中的IN和EXISTS
- Linq to SQL语句之 Group By /Having和Exists/In/AnyAll/Contains
- LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
- LINQ体验(7)--LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Conta...
- Sql语句优化之用exists、not exists替代in、not in
- LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains