MySQL子查询之where后的列子查询和行子查询

where后面的列子查询(多行子查询)

首先来看一下多行操作符

in/not in:等于列表中的任意一个

a in(10,20,30); 可以替换 a=10 or a=20 or a=30;

any/some:和子查询返回的某一个值比较

a > any(10,20,30); 可以替换 a > min(10,20,30);

all:和子查询返回的所有值比较

a > all(10,20,30); 可以替换 a > max(10,20,30);

a >10 and a>20 and a>30

案例1:

返回location_id是14000或17000的部门中的所有员工的名字

select last_name from employees
where department_id in (select department_id from departments
where location_id in (14000,17000));

案例2:

查询其他工种中比job_id为'IT_PROG'的员工某一工资低的员工的员工号,姓名,job_id和salary

SELECT employee_id,last_name,job_id,salary FROM employees
WHERE salary < ANY(SELECT distinct salary FROM employees WHERE job_id='IT_PROG') and job_id<>'IT_PROG';

案例3:

查询其他工种中比job_id为'IT_PROG'的员工所有工资低的员工的员工号,姓名,job_id和salary

SELECT employee_id,last_name,job_id,salary FROM employees
WHERE salary < all(SELECT distinct salary FROM employees WHERE job_id='IT_PROG') and job_id<>'IT_PROG';

where后面的行子查询(一行多列)

案例:

查询员工编号最小并且工资最高的员工信息

select * from employees
where
employee_id = (select min(employee_id) from employees)
and
salary = (select max(salary) from employees);

行子查询的写法:

下面是行子查询的写法(用的很少,了解就可以)

select * from employees
where (employee_id,salary)=(
select min(employee_id) , max(salary) from employees
);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白云如幻

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

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

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

打赏作者

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

抵扣说明:

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

余额充值