oracle(20)_SQL_子查询

版权声明:如需转载,请注明出处 https://blog.csdn.net/qq_36260974/article/details/88776025

SQL

子查询

子查询

● 子查询

  • 在一个查询的内部还包括另一个查询,则此查询称为子查询。SQL 的任何位置都可以加入子查询。

范例:查询比 7654 工资高的雇员

  • 分析:查询出 7654 员工的工资是多少,把它作为条件
  • 示例图:
    在这里插入图片描述
    注意:
    所有的子查询必须在 “()” 中编写。
    子查询在操作中有三类:
    ① 单列子查询:返回的结果是一列的一个内容
    ② 单行子查询:返回多个列,有可能是一个完整的记录
    ③ 多行子查询:返回多条记录

范例:查询出比雇员 7654 的工资高,同时从事和 7844 的工作一样的员工

  • 示例图:
    在这里插入图片描述

范例:要求查询每个部门的最低工资和最低工资的雇员和部门名称

  • 示例图:
    在这里插入图片描述
    在返回多条记录的子查询可以把它的结果集当做一张表,给起个别名, 如图中的 a。

范例:查询出来所有和每个部门最低工资的员工工资相等的人

  • 示例图:
    在这里插入图片描述

以上操作完整源码:

--查询比7654工资高的雇员
select *
  from emp t
 where t.sal > (select e.sal from emp e where e.empno = 7654);
 
--查询出比雇员 7654 的工资高,同时从事和 7844 的工作一样的员工
 select *
   from emp t
  where t.sal > (select e.sal from emp e where e.empno = 7654)
    and t.job = (select e.job from emp e where e.empno = 7844)
    
--要求查询每个部门的最低工资和最低工资的雇员和部门名称
select t.*, d.dname
  from emp t,
       (select min(e.sal) minsal, e.deptno from emp e group by e.deptno) a,
       dept d
 where t.sal = a.minsal
   and t.deptno = a.deptno
   and t.deptno = d.deptno;
     
--查询出来所有和每个部门最低工资的员工工资相等的人
select *
  from emp t
 where t.sal in (select min(e.sal) from emp e group by e.deptno)

如有错误,欢迎指正!

猜你喜欢

转载自blog.csdn.net/qq_36260974/article/details/88776025