30.all和any
1.显示比30号部门所有员工工资高的员工信息
依旧是之前使用过的雇员表:
根据上一节学过的子查询分析一下步骤:
(1)查询出30号部门下的员工的最高工资(使用max函数即可)
select max(sal) from emp ewhere e.deptno = 30;
(2)将上一步的结果做子查询
select ename,sal,deptno from emp e where e.sal > (select max(sal) from emp ewhere e.deptno = 30);
这就得到了我们想要的结果了。
其实有一个操作符也可以完成这项工作,同样适用于子查询当中:
也就是“all”这个操作符:也即所有的之含义。
select ename,sal,deptno from emp e where e.sal > all(select sal from emp ewhere e.deptno = 30);
同样我们可以得到想要的结果。
2.显示比30号部门任意一个员工工资高的员工信息
同上一个案例,分析一下步骤:
(1)查询出30号部门下的员工的最低工资(使用min函数即可)
(2)将上一步的结果做子查询
select ename,sal,deptno from emp e where e.sal > (select min(sal) from emp ewhere e.deptno = 30);
同样的,显示比30号部门任意一个员工工资高的员工信息,也即是先找到30号部门下的最低工资,只要其他员工比这个工资高就是满足要求的。
也有操作符“any”可以替代“min函数”,其亦有“任意一个”的含义。
select ename,sal,deptno from emp e where e.sal > any(select (sal) from emp ewhere e.deptno = 30);
同样可以得到这个结果。