MySQL -> DQL:子查询:跟在where后面的子查询

跟在where后面的子查询:

“查询工资大于平均工资的员工name”:子查询返回一个单行单列的数据;><=

"查询工资大于平均工资的员工name"
# 正常思路:可惜:where后面不能使用分组函数
SELECT salary,last_name
FROM employees
WHERE salary > AVG(salary);# 错误写法

# 正确的写法:使用子查询,子查询返回一个单号单列的数据
# salary字段中每个数据都会与返回的avg比较,满足筛选条件的就显示查询
SELECT salary,last_name
FROM employees
WHERE salary > (
	SELECT AVG(salary)
	from employees
);

"查询工资大于xx部门的工资最小值的员工信息":
select *
fromwhere 工资 > (
	select min(工资)
	fromwhere 部门 = 'xx';
)

"查询员工编号最小工资最高的员工信息":
select *
fromwhere id = (
	select min(id)
	from) and 工资 = (
	select max(工资)
	from);

'简洁写法:'
select *
fromwhere (id,工资) = (
	select min(id),max(工资)
	from);

“查询城市id是100或者200的城市的员工信息”:子查询返回一列多个数据的;in

# in不能配合><=使用,可以使用not in;
# 员工表没有城市id,城市id在城市表,子查询结果不止一个数据的
"查询城市id是100或者200的城市的员工信息":
select *
from 员工表
where 城市 in(
	select 城市
	from 城市表
	where 城市id in(100,200)
);

“查询其他部门比xx部门的员工任意工资低的员工信息”:any,要配合><=使用

"查询其他部门比xx部门的员工任意工资低的员工信息":
select *
fromwhere 工资 < any(
	select 工资
	fromwhere 部门 = 'xxx';
)

'任意工资都低 等价于 比最大工资都要低'
select *
fromwhere 工资 < (
	select max(工资)
	fromwhere 部门 = 'xxx';
);

any:配合><使用,也就相当于min,max,就变成了一个单号单列的数据了;配合=使用,in意思一样

“查询其他部门比xxx部门的员工的工资都低的员工信息”:all与any相似,同上

"查询其他部门比xxx部门的员工的工资都低的员工信息":
select *
fromwhere 工资 < all(
	select 工资
	fromwhere 部门 = 'xxx';
);any:比所有的都要小,就是比最小的都小;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值