A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hs.zhu 初级黑马   /  2019-5-9 08:47  /  732 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

子查询

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马