子查询:在一个查询的内部还包括另一个查询,则此查询称为子查询。
Sql的任何位置都可以加入子查询。
范例:查询比部门编号为7698的员工工资高的雇员
分析:查询出 7698 员工的工资是多少,把它作为条件
select * from emp t1 where t1.sal >( select t.sal from emp t where t.empno=7698)
结果
子查询在操作中有三类:
1、单列子查询:返回的结果是一列的一个内容
-- 查询出比雇员 7654 的工资高,同时从事和 7788的工作一样的员工 select * from emp t1 where t1.sal >( select t.sal from emp t where t.empno=7654) and t1.job = (select t2.job from emp t2 where t2.empno=7788)
其中:select t2.job from emp t2 where t2.empno=7788查询的结果为ANALYST
结果
2、单行子查询:返回多个列,有可能是一个完整的记录
3、多行子查询:返回多条记录
范例:要求查询每个部门的最低工资和最低工资的雇员和部门名称
-- 使用显示内连接 select emp.ename,d.dname,a.losal from emp inner join (select t1.deptno,min(t1.sal) as losal from emp t1 group by t1.deptno) a on emp.sal=a.losal inner join dept d on d.deptno = a.deptno -- 使用隐式内连接 select emp.ename,d.dname,a.losal from emp, (select t1.deptno,min(t1.sal) as losal from emp t1 group by t1.deptno) a,dept d where d.deptno = a.deptno and emp.sal=a.losal
结果:
其中:select t1.deptno,min(t1.sal) as losal from emp t1 group by t1.deptno,该子查询查出的结果为
在返回多条记录的子查询中,可以把它的结果集当做一张表,给起个别名, 如图中的 a。