子查询
1. 子查询的概念
1. 一个查询的结果作为另一个查询的条件
2. 有查询的嵌套,内部的查询称为子查询
3. 子查询要使用括号
2. 子查询结果的三种情况
- 子查询的结果是单行单列
- 子查询的结果是多行单列
- 子查询的结果是多行多列
3. 子查询的结果是一个值
- 子查询的结果只要是单行单列,肯定在where后面作为条件,父查询使用比较运算符,如:
>, <, <>, =等
- 案例:
-- 查询工资最高的员工是谁
select * from emp where salary = (select max(salary) from emp);
-- 查询工资小于平均工资的员工有哪些
select * from emp where salary < (slect avg(salary) from emp);
4. 子查询结果是多行单列
- 子查询结果是单行多列,结果集类似于一个数组,父查询使用in运算符
- 案例:
-- 查询工资大于5000的员工,来自于哪些部门的名字
select name from dept where id in (select dept_id from emp where salary > 5000);
-- 查询开发部与财务部所有员工的信息
select * from emp where dept_id in (select id from dept where name in('开发部', '财务部'));
5. 子查询结果是多行多列
- 子查询结果只要是多列,肯定在from后面作为表
子查询作为表需要取别名,否则这张表没有名称则无法访问表中的字段
select 查询字段 from (子查询) 表别名 where 条件;
- 案例:
-- 查询出2011年后入职的员工信息,包括部门名称
select
*
from
dept d,
(select * from emp where join_date >= '2011-1-1') e
where
d.id = e.dept_id;
-- 也可以使用表连接
select * from emp inner join dept om emp.dept_id = dept.id where join_date >= '2011-1-1';
|
|