1.先于主查询执行。
2.主查询调用了子查询的结果。
3.注意列的个数和类型要匹配。
4.查询返回多行要用多行关系运算操作。
5.子查询要用括号括起来。
查询工资总和高于10号部门工资总和的部门。
select deptno,sum(sal)
from emp
group by deptno
having sum(sal)>(select sum(sal) from emp where deptno=10);
DEPTNO SUM(SAL)
------ ----------
30 9400
查询每个部门的最大工资是谁。
select deptno,ename,sal
from emp
where (deptno,sal) in (select deptno,max(sal) from emp group by deptno);
DEPTNO ENAME SAL
------ ---------- ----------
30 BLAKE 2850
10 KING 5000
20 FORD 3000
子查询返回多行,用=不可以,得用in。
子查询返回多列,所以对比的列也要匹配。
Any 和all操作
SQL> select ename,sal from emp where sal
ENAME SAL
---------- ----------
SMITH 800
ALLEN 1600
WARD 1250
MARTIN 1250
TURNER 1500
JAMES 950
MILLER 1300
7 rows selected.
小于2000就可以
SQL> select ename,sal from emp where sal
ENAME SAL
---------- ----------
SMITH 800
JAMES 950
必须小于1000
小于all小于最小,大于all大于最大
SQL> select ename,sal,deptno from emp
2 where sal
ENAME SAL DEPTNO
---------- ---------- ------
SMITH 800 20
WARD 1250 30
MARTIN 1250 30
TURNER 1500 30
JAMES 950 30
MILLER 1300 10
小于any小于最大,大于any大于最小
select ename,sal,deptno from emp
where sal>any(select avg(sal) from emp group by deptno)
ENAME SAL DEPTNO
ALLEN 1600 30
JONES 2975 20
BLAKE 2850 30
CLARK 2450 10
KING 5000 10
FORD 3000 20