【大数据系列之MySQL】(二十七):子查询的经典使用案例

案例1:查询工资最低的员工信息:last_name,salary(where后标量子查询)

首先查询出最低工资,然后使用该工资进行筛选

SELECT last_name, salary FROM employees WHERE salary =( SELECT min( salary ) FROM employees );

案例2:查询平均工资最低的部门信息(from后表子查询,where后标量子查询)

先查询出部门的平均工资,然后在查哪个部门的平均工资最低,再查哪个部门的平均工资等于最低工资,最后查询部门信息

SELECT
	* 
FROM
	departments 
WHERE
	department_id =(
	SELECT
		department_id 
	FROM
		( SELECT department_id, avg( salary ) avg FROM employees GROUP BY department_id ) ad 
	WHERE
		avg =(
		SELECT
			min( avg ) 
		FROM
		( SELECT department_id, avg( salary ) avg FROM employees GROUP BY department_id ) ad 
	));

案例3:查询平均工资最低的部门信息和该部门的平均工资

SELECT
	* 
FROM
	(
	SELECT
		* 
	FROM
		departments 
	WHERE
		department_id =(
		SELECT
			department_id 
		FROM
			( SELECT department_id, avg( salary ) avg FROM employees GROUP BY department_id ) ad 
		WHERE
			avg =(
			SELECT
				min( avg ) 
			FROM
				( SELECT department_id, avg( salary ) avg FROM employees GROUP BY department_id ) ad 
			))) a
	JOIN ( SELECT department_id, avg( salary ) avg FROM employees GROUP BY department_id ) b ON a.department_id = b.department_id;

案例4:查询平均工资最高的job信息

先查询出平均工资最高的job_id是什么,然后再去job表中查询

SELECT
	* 
FROM
	jobs 
WHERE
	job_id = (
	SELECT
		job_id 
	FROM
		employees 
	GROUP BY
		job_id 
	ORDER BY
	avg( salary ) DESC 
	LIMIT 1)

案例5:查询平均工资高于公司平均工资的部门有哪些?

首先查询出公司的平均工资,然后再查询出各部门的平均工资,然后使用having进行筛选

SELECT
	department_id,
	avg( salary ) ag 
FROM
	employees 
GROUP BY
	department_id 
HAVING
	ag >(
	SELECT
		avg( salary ) ag 
	FROM
	employees)

案例6:查询出公司中所有manager的详细信息

首先查询出公司中所有的manager的id,然后使用in去做遍历

SELECT
	* 
FROM
	employees 
WHERE
	employee_id IN (
	SELECT DISTINCT
		manager_id 
	FROM
		employees 
WHERE
	manager_id IS NOT NULL)

案例7:各个部门中最高工资中最低的那个部门的最低工资是多少

SELECT
	min( salary ) 
FROM
	employees 
WHERE
	department_id = ( SELECT department_id FROM employees GROUP BY department_id ORDER BY max( salary ) LIMIT 1 );

案例8:查询平均工资最高的部门的manager的详细信息:last_name,department_id,email,salary

SELECT
	last_name,
	department_id,
	email,
	salary 
FROM
	employees 
WHERE
	employee_id IN ( SELECT DISTINCT manager_id FROM employees WHERE manager_id IS NOT NULL ) 
	AND department_id = ( SELECT department_id FROM employees GROUP BY department_id ORDER BY avg( salary ) DESC LIMIT 1 );
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋 之心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值