第五阶段 -- 数据库:day21_07/03/19【子查询】

子查询

  1. 是一个查询语句中包含了另一个查询语句

  2. 作用:

    1. 作为条件:

      • 例如:

      • 标量子查询:查询雇员的薪资高于‘clark’的雇员信息;

      • 行子查询:查询雇员表中部门职位与‘Allen’相同的雇员信息;

      • 列子查询:查询部门20中能够同部门10中职位相同的雇员信息(使用in的列子查询)

      • (使用any或者some列子查询)

        • any:返回结果中的任何一个数据
        • some是any的别名,很少使用
        • 例如:查询雇员emp表中月薪低于任何一个clerk的月薪的雇员
      • 使用all的列子查询:all指返回结果中的所有数据

        • 例如:查询雇员emp表中月薪不低于所有‘clerk’月薪的雇员信息
      • 使用exists列子查询:exists表示存在的意思;使用exist是关键字时,子查询语句返回的并不是查询记录的结果集,而是一个布尔类型的值,如果子查询有满足条件的纪录,则返回true,会执行查询;如果没有满足条件的记录,则返回false,则不会执行主查询。

        • 例如:查询dept表中有雇员的部门信息
      -- 查询雇员的薪资高于‘clark’的雇员信息
      select * from emp where sal>(select sal from emp where ename='clark')
      -- 查询雇员表中部门职位与‘Allen’相同的雇员信息
      select * from emp where (deptno,job)=(select deptno,job from emp where ename='allen')
      -- 查询部门20中能够同部门10中职位相同的雇员信息
      select * from emp 
      	where job in (select job from emp where deptno=10) and deptno=20
      -- 查询雇员emp表中月薪低于任何一个clerk的月薪的雇员
      select * from emp 
      	where sal < any(select sal from emp where job='clerk')
      -- 查询雇员emp表中月薪不低于所有‘clerk’月薪的雇员信息
      select * from emp
      	where sal < all(selelct sal from emp where job='clerk')
      -- 查询dept表中有雇员的部门信息
      select * from dept
      	where exists (select ename from emp where deptno=dept.deptno)
      
    2. 作为表:

  • 例如:查询emp表中,每个部门平均工资最高的工资

    -- 1.查询每个部门的平均工资
    select avg(sal) from emp group by deptno
    -- 2.子查询作为一张表,查询最高平均工资,注意要给子查询表起个名字
    select max(avgsal) 
    	from (select avg(sal) avgsal from emp group by deptno) avg_sal
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值