IN和EXISTS的区别(mysql)

本文详细解析了SQL中的IN与EXISTS语句的使用方法,包括查询步骤、查询次数及具体应用场景。通过对比,阐述了两者在不同情况下的优劣,帮助读者在实际操作中做出更合理的选择。

IN语句

       确定给定的值是否与子查询或列表中的值相匹配。

查询步骤
        1.查询子查询的表;
        1.将内表和外表做一个笛卡尔积;
        1.按照条件进行筛选。

查询次数
       只查询一次。

具体SQL语句
       查询各个部门入职最晚的员工的信息。

SELECT
	*
FROM
	emp e
WHERE (e.deptno,e.hiredate)IN(
	SELECT
		deptno,MAX(hiredate)
	FROM
		emp
	GROUP BY
		deptno
	);

EXISTS语句

       指定一个子查询,检测行的存在。

查询步骤
       遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。

查询次数
       次数与查询外表的长度相同。

具体SQL语句
       查询各个部门入职最晚的员工的信息。

SELECT
	*
FROM 
	emp e
WHERE NOT EXISTS(
	SELECT
		*
	FROM
		emp
	WHERE
		hiredate>e.`hiredate`
	AND
		deptno=e.`deptno`
	);

IN与EXISTS的区别及运用场景

       1. 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in;
       2. 如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists;
       3. 如果是exists,那么以外层表为驱动表,先被访问;
       4. 如果是IN,那么先执行子查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值