MySQL ---- SQL语句学习笔记三

本文介绍SQL子查询的应用场景,包括WHERE、SELECT、HAVING、ON及FROM子句中的子查询用法,并通过实例展示了如何找出每个部门工资最高的员工。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例用表

  1. emp表
idnamesalarydepId
1Joe700001
2Henry800002
3Sam600002
4Max900001
CREATE TABLE emp(id INT,name char(255),salary int, depId int);

INSERT INTO emp VALUES(1,'Joe',70000,1),(2,'Henry',80000,2),(3,'Sam',60000,2),(4,'Max',90000,1);
  1. dep表
idname
1IT
2Sales
CREATE TABLE dep(id INT,name char(255));

INSERT INTO dep VALUES(1,'IT'),(2,'Sales');

1.WHERE 里边的子查询

子查询如果在 where 或 select 中时,相当于【子查询】先计算结果再判断!
“=” 的子查询返回必须唯一,否则就会报错!
IN 的子查询可以返回一列的结果!

1.1 找出每个部门工资最高的员工!

SELECT
	dep. NAME AS '部门',
	p2. NAME AS '员工',
	p2.salary
FROM
	emp p2
JOIN dep ON dep.id = p2.depId
WHERE
	p2.salary IN (
		SELECT
			MAX(salary) AS salary
		FROM
			emp p1
		GROUP BY
			p1.depId
	)

2.SELECT 里边的子查询

子查询返回必须唯一!否则就会报错!

2.1 找出全部员工中工资最高的,添加max行!

SELECT
	dep. NAME,
	p2. NAME,
	p2.salary,
	(
		SELECT
			MAX(salary) AS salary
		FROM
			emp p1
	) AS max
FROM
	emp p2
JOIN dep ON dep.id = p2.depId

3.having 里边的子查询

不常见,基本不用!

4.ON 里边的子查询

不常见,基本不用!

5.FROM 里边的子查询

在 FROM 里边的子查询必须要有别名!

5.1 找出每个部门工资最高的员工!

SELECT
	dep. NAME AS '部门',
	p2. NAME AS '员工',
	p2.salary
FROM
	emp p2
JOIN dep ON dep.id = p2.depId
JOIN (
	SELECT
		MAX(salary) AS salary,
		depId
	FROM
		emp p1
	GROUP BY
		p1.depId
) p3 ON p2.depId = p3.depId
AND p2.salary = p3.salary

6.半连接查询

子查询中使用了父查询的信息!

6.1 找出每个部门工资最高的员工!

SELECT
	dep. NAME AS '部门',
	p1. NAME AS '员工',
	p1.salary
FROM
	emp p1
JOIN dep ON dep.id = p1.depId
WHERE
	p1.salary = (
		SELECT
			MAX(salary) AS max
		FROM
			emp p2
		WHERE
			p2.depId = p1.depId
	)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rattenking

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

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

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

打赏作者

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

抵扣说明:

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

余额充值