mysql中的EXISTS用法简介

本文详细介绍了SQL中的EXISTS和NOT EXISTS子查询的使用,通过实例展示了如何找出未分配到具体部门的员工信息。EXISTS子查询会检查内层查询是否返回结果,而NOT EXISTS则检查内层查询是否不返回结果。在例子中,通过对比使用EXISTS和NOT IN的查询方式,解释了它们在寻找未分配部门员工信息时的区别。
摘要由CSDN通过智能技术生成

首先分清:

EXISTS子查询找到的提交

NOT EXISTS 子查询中 找不到的提交

查询方式:

        Exists执行的流程Exists首先执行外层查询,再执行内层查询,与IN相反。 流程为首先取出外层中的第一元组, 再执行内层查询,将外层表的第一元组代入,若内层查询为真,即有结果时.返回外层表中的第一元组,接着取出第二元组,执行相同的算法。一直到扫描完外层整表 。

也可以说是指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。

例子:(题目来自牛客)

使用含有关键字exists查找未分配具体部门的员工的所有信息。
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));

使用exists:

select *
from employees
where not exists
(
    select emp_no
    from dept_emp
    where employees.emp_no=dept_emp.emp_no
)

使用in:

select *
from employees
where emp_no not in
(
    select emp_no
    from dept_emp
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值