Select语句查询中in和exists的区别

 

 

       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.

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值