您的位置:首页 > 数据库 > MySQL

10.3where后面的 列子查询使用——MySQL

2020-08-02 22:36 211 查看
-- where后面的 列子查询(多行子查询)
/*
in/not in    等于/不等于 列表中的任意一个 (☆)

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

all          和子查询返回的所有值比较
*/
-- 案例1:返回location_id 是1400或1700的部门中的所有员工姓名
-- ①查询location_id是1400或1700的部门编号
-- ②查询员工姓名要求部门编号是①中的一个
SELECT last_name
from employees
WHERE department_id in(
SELECT  DISTINCT department_id -- 这里还是需要去重的
FROM departments
WHERE location_id in (1400,1700));
-- 或
SELECT last_name
from employees
WHERE department_id=ANY(
SELECT  DISTINCT department_id -- 这里还是需要去重的
FROM departments
WHERE location_id in (1400,1700));

-- 案例2:返回其他工种中比job_id 为“IT_PROG”部门任意工资低的员工的员工号,姓名,job_id以及salary
-- ①查询job_id为“ITPROG”部门任一工资
-- ②查询员工号,姓名,job_id以及salary

SELECT last_name,employee_id,salary
FROM employees
WHERE salary<ANY(
SELECT DISTINCT salary
FROM employees
WHERE job_id="IT_PROG"
)AND job_id<>"IT_PROG";

-- 或
SELECT last_name,employee_id,salary
FROM employees
WHERE salary<(
SELECT MAX(salary)
FROM employees
WHERE job_id="IT_PROG"
)AND job_id<>"IT_PROG";

-- 案例3:返回其他工种中比job_id 为“IT_PROG”部门所有工资低的员工的员工号,姓名,job_id以及salary
SELECT last_name,employee_id,salary
FROM employees
WHERE salary<ALL(
SELECT DISTINCT salary
FROM employees
WHERE job_id="IT_PROG"
)AND job_id<>"IT_PROG";

-- 或
SELECT last_name,employee_id,salary
FROM employees
WHERE salary<(
SELECT MIN(salary)
FROM employees
WHERE job_id="IT_PROG"
)AND job_id<>"IT_PROG";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: