sql in 和 exits

本文介绍了SQL中的IN和EXISTS操作符,包括它们的概念、使用性能和注意事项。当在外查询中使用NOT IN并且子查询中有NULL值时,可能会导致没有结果。而EXISTS通常比IN在效率上更高,除非在确定的有限集合中使用IN。通过实例展示了当内外表大小不同时,选择IN或EXISTS的影响。最后提到了NULL在比较运算中的特殊行为。
摘要由CSDN通过智能技术生成

一 .概念

        in 查询返回一个列表,提供的列表给外查询使用

        exit 是对自查询进行判断是否存在行,存在则 true,不存在则为 false

for x in ( select * from t1 ) 
loop 
  if ( exists ( select null from t2 where y = x.x ) 
then 
OUTPUT THE RECORD! 
end if 
end loop 

二.使用性能

        1. 如果查询的两个表大小差不多,则使用in和exit性能差不多

        2. 外表大,内表小 使用 in 效率高

        3. 外表小,内表大 使用 exits 效率高

总结:EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用,例如:如果是确定且有限的集合时,可以使用,比如:(1,2,3,4,5)

三.注意(如果在not in子查询中有null值的时候,则不会返回数据)

not in 需要有null的数据 出现奇怪情况

举例子:

 1. 数据:

create table student(
	id int,
	`name` varchar(100)
);

create table detail(
	id int,
	address varchar(100)
);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值