exists ,not exists,in ,not in 区别

适合场景:从两张表中找出相同/不同的数据

  • Sql 中 in 里面的子查询只能返回一个字段列,如果返回多个列会报错。但是in里面直接使用值是可以的

  • exists是可以返回多个字段的,但是exists并不在意返回的字段结果,而是判断结果的真假

  • in 与exists的区别是:

    1. in是将子查询中的查出的结果放到缓存中,然后进行遍历比对,适合in外面的表数据量大,里面的表数据量小的情况
    2. exists是外面的查询每执行一次会去子查询中获取一个boolean的结果,适合外面的表数据量小,里面的表数据量大的情况
    3. in 并不会让索引失效
  • not in 与 not exists区别

    1. 使用not in 在遇到空字段时,执行结果会返回空,如果子查询字段有非空限制,可以使用not in。not in会进行全表扫描,不会使用索引
    2. not exists会得到正确结果。
SELECT
	bg.group_id group_id,
	bg.NAME NAME 
FROM
	ig_bbc_group bg 
WHERE
	bg.delete_flg = 0 
	AND  NOT EXISTS (
	SELECT
		1 
	FROM
		ig_bbc_group_product p 
	WHERE
		p.bbc_group_id = bg.id 
		AND p.product_id = 517169123920159585 
	AND p.delete_flg = 0 
	)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值