in 和 exists的使用

博客主要对比数据库中in和exists关键字。in关键字语句易理解,但不走索引,子集数据量大时效率低,先查子集再全表检索;exists先进行外部查询,子查询引用外部结果集,会用到索引,若有100行数据会进行101次查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相比较而言,in关键字使用的要更多一点,因为语句更容易理解。
如下:
在这里插入图片描述
在这里插入图片描述
查询张三老师所教的课程名称
使用in关键字查询
select c_name from course c where c.t_id
in (select t_id from teacher where t_name = ‘张三’)

使用exists关键字查询
select c_name from course c where
EXISTS (select t_id from teacher t where t.t_id=c.t_id and t.t_name=‘张三’)

这一比较就知道in关键字更简单
但是in关键字不走索引,如果子集里的数据量很大的话,不走索引的效率会非常低

in 和exists的区别:
(in 是先查询子集,然后进行全表检索,一行一行的去查询,查询到符合in字句的结果就返回,反之就继续查询下一条,不走索引)

(exists 是先进行一次外部查询,然后开始执行子查询,并且每次子查询都会引用外部查询的结果集,如果子查询根据外部结果查询到了数据,就返回true。使用子查询的结果来确定外部查询的结果集。子查询会用到索引。如果我们有100行数据,那exists会进行101次查询,一次查询外部,100次查询子集)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值