一、概述
子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
常用的操作符:in、not in、any、some、all
二、演示
【例1】查询“销售部”和“市场部”的所有员工信息
1、查询销售部和市场部的部门ID
返回的结果是一列(可以多行)
2、根据销售部的部门ID,查询员工信息
3、合并两个,变为子查询
【例2】查询比财务部所有人工资都高的员工信息
1、查询财务部的部门ID
2、查询财务部所有人员工资
返回的结果是一列(可以多行)
3、比财务部所有人工资都高的员工信息
【例3】查询比研发部其中任意一人工资高的员工信息
1、查询研发部的部门ID
2、查询研发部所有人员工资
返回的结果是一列(可以多行)
3、比研发部任意一人工资高的员工信息
【代码】
-- 列子查询
-- 1、查询“销售部”和“市场部”的所有员工信息
-- a.查询销售部和市场部的部门ID
select id from dept1 where name = '销售部' or name = '市场部'; -- 返回2, 4
-- b.根据销售部的部门ID,查询员工信息
select * from emp1 where dept_id in (2, 4);
-- 合并两个,变为子查询
select * from emp1 where dept_id in (select id from dept1 where name = '销售部' or name = '市场部');
-- 2、查询比财务部所有人工资都高的员工信息
-- a.查询财务部的部门ID
select id from dept1 where name = '财务部'; -- 返回3(id值)
-- a.查询财务部所有人员工资
select salary from emp1 where dept_id = 3;
select salary from emp1 where dept_id = (select id from dept1 where name = '财务部');
-- b.比财务部所有人工资都高的员工信息
select * from emp1 where salary > all (select salary from emp1 where dept_id = (select id from dept1 where name = '财务部'));
-- 3、查询比研发部其中任意一人工资高的员工信息
-- a.查询研发部的部门ID
select id from dept1 where name = '研发部'; -- 返回1(id值)
-- a.查询研发部所有人员工资
select salary from emp1 where dept_id = (select id from dept1 where name = '研发部');
-- b.比研发部任意一人工资高的员工信息
select * from emp1 where salary > any (select salary from emp1 where dept_id = (select id from dept1 where name = '研发部'));
select * from emp1 where salary > some (select salary from emp1 where dept_id = (select id from dept1 where name = '研发部'));