MYSQL关联子查询与 EXISTS关键字

1 相关子查询执行流程

在这里插入图片描述

2 SQL示例

-- 相关子查询,查找工资大于同部门平均工资的员工信息
SELECT
	last_name,
	salary,
	department_id 
FROM
	employees e1
WHERE
	e1.salary > (
	SELECT
		avg( salary ) 
	FROM
		employees e2
WHERE
	e2.department_id = e1.department_id)

3 EXISTS与NOT EXISTS关键字

3.1 EXISTS的使用

-- 求管理者的 employee_id,last_name,job_id,department_id,   manager_id是管理者的employee_id。
-- 方式一
SELECT DISTINCT
	e2.employee_id,
	e2.last_name,
	e2.job_id,
	e2.department_id 
FROM
	employees e1
	JOIN employees e2 ON e1.manager_id = e2.employee_id;.
	

-- 方式二	
SELECT
	employee_id,
	last_name,
	job_id,
	department_id 
FROM
	employees 
WHERE
	employee_id IN ( SELECT DISTINCT manager_id FROM employees WHERE manager_id IS NOT NULL );
	
-- 方式三:用EXISTS,用外层的SELECT去对比内层的SELECT,内层WHERE为TRUE就说明存在,则显示出来。
SELECT
	e1.employee_id,
	e1.last_name,
	e1.job_id,
	e1.department_id 
FROM
	employees e1 
WHERE
	EXISTS (
	SELECT
		* 
	FROM
		employees e2 
	WHERE
	e1.employee_id = e2.manager_id);

3.2 NOT EXISTS的使用


-- 题目:查询departments表中,不存在于employees表中的部门的department_id 与 department_name。
SELECT
	department_id,
	department_name 
FROM
	departments d 
WHERE
	NOT EXISTS (
	SELECT
		* 
	FROM
		employees e 
WHERE
	d.department_id = e.department_id)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值