Select语句查询中in和exists的区别
2012-10-15 19:32
381 查看
in是关系运算符,确定给定的值是否与子查询中的值或列表中的值相匹配;exists是相关子查询,是用来判断括号里面的值或者结果集是否为null的,返回的是bit类型的。
这里值得强调的是exists的效率比in高的说法是不正确的,应该具体问题具体分析。
in可以分为三类:
1、形如:select * from t1 where f1 in ( 'a', 'b ')
2、形如 :select * from t1 where f1 in (select f1 from t2where t2.fx= 'x '),
其中子查询的where里的条件不受外层查询的影响,这类查询一般情况下,自动优化会转成exist语句,也就是效率和exist一样。
3、形如:select * from t1 where f1 in (select f1 from t2where t2.fx=t1.fx),
其中子查询的where里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般认为效率不如exists。
除了第一类in语句都是可以转化成exists 语句的,并且一般编程习惯应该是用exists而不用in.
这里值得强调的是exists的效率比in高的说法是不正确的,应该具体问题具体分析。
in可以分为三类:
1、形如:select * from t1 where f1 in ( 'a', 'b ')
2、形如 :select * from t1 where f1 in (select f1 from t2where t2.fx= 'x '),
其中子查询的where里的条件不受外层查询的影响,这类查询一般情况下,自动优化会转成exist语句,也就是效率和exist一样。
3、形如:select * from t1 where f1 in (select f1 from t2where t2.fx=t1.fx),
其中子查询的where里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般认为效率不如exists。
除了第一类in语句都是可以转化成exists 语句的,并且一般编程习惯应该是用exists而不用in.
相关文章推荐
- mysql查询语句in和exists二者的区别和性能影响
- mysql查询语句in和exists二者的区别和性能影响
- mysql查询语句in和exists二者的区别和性能影响
- 【SQL】查询语句中in和exists的区别
- sql查询语句中 in和 exists的区别与性能比较
- 【SQL】查询语句中in和exists的区别
- mysql查询语句in和exists二者的区别和性能影响
- mysql查询语句in和exists二者的区别和性能影响
- mysql查询语句in和exists二者的区别和性能影响
- ORACLE in与exists语句的查询效率的区别
- SQL查询中in和exists的区别分析
- sql查询语句的优化,exists与in的更换
- mySQL中in查询与exists查询的区别小结
- exists与in的区别以及exists在oracle与mysql中的语句写法
- SQL查询语句select *和select 列名的区别
- oracle查询语句中的exists 和in 的详细用法
- sql查询语句的优化,exists与in的更换
- mysql中select中in()查询语句 原样输出
- ORACLE in与exists语句的区别
- IN&EXISTS 与 NOT IN&NOT EXISTS 子查询 区别