Subquery.md

子查询

目录:

括号内的查询叫做子查询,也叫内部查询,先于主查询执行 。

子查询的结果被主查询(外部查询)使用。

expr operator包括比较运算符:

子查询可以嵌于以下SQL子句中:

使用:

单行子查询

子查询只返回一行一列。

使用单行运算符。

SELECT ename,sal
FROM emp
WHERE sal=
      (SELECT MAX(sal)
      FROM emp)

多行子查询

子查询返回记录的条数可以是一条或多条。

和多行子查询进行比较时,需要使用多行操作符,多行操作符包括:IN、ANY和ALL。

IN

SELECT deptno,ename,sal
FROM emp
WHERE sal IN
      (SELECT sal
      FROM emp
      WHERE deptno=20)

ANY

表示和子查询的任意一行结果进行比较,有一个满足条件即可。

SELECT deptno,ename,sal
FROM emp
WHERE sal > ANY
      (SELECT sal
      FROM emp
      WHERE deptno=20)
AND deptno <> 10

ALL

表示和子查询的所有行结果进行比较,每一行必须都满足条件。

SELECT deptno,ename,sal
FROM emp
WHERE sal > ALL
      (SELECT sal
      FROM emp
      WHERE deptno=30)
AND deptno <> 10

多列子查询

SELECT ename
FROM emp
WHERE empno NOT IN
                (SELECT nvl(mgr,0)
                FROM emp)

在FROM子句中使用子查询

SELECT a.ename,a.deptno,b.sa
FROM emp a,(SELECT deptno,AVG(sal) sa
            FROM emp
            GROUP BY deptno) b
WHERE a.deptno=b.deptno

ROWNUM

SELECT ROWNUM,ename
FROM emp

TOP-N查询

Top-N查询主要是实现表中按照某个列排序,输出最大或最小的N条记录功能。