黑马程序员技术交流社区

标题: 【成都校区】数据库子查询 [打印本页]

作者: hs.zhu    时间: 2019-5-9 08:47
标题: 【成都校区】数据库子查询
子查询

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';
     





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2