1.子查询可以嵌于以下子句:
- WHERE子句
- HAVING子句
- FROM子句
- SELECT子句
2.子查询类型
- 单行子查询(只返回一行一列,使用单行运算符)
- 多行子查询(返回一行一列或多行一列记录,使用多行运算符,)
多行运算符
IN:判断与子查询结果的任意值相同
ALL:<ALL(小于最小值)、>ALL(大于最大值)、=ALL(等于所有值,通常无意义)
ANY:<ANY(小于最大值)、>ANY(大于最小值)、=ANY(相当于IN)
- 多列子查询(用IN完成)
SELECT ename,deptno,job,hiredate FROM emp WHERE (deptno,job) IN (SELECT deptno,job FROM emp WHERE to_char(hiredate,'yyyy')='1981') AND to_char(hiredate,'yyyy')<>'1981'; |
3.空值问题
所有条件和空值比较结果都为空值
只要空值有可能成为子查询结果集合的一部分,就不能使用NOT IN 运算符
若要使用NOT IN,要手动去掉子查询结果的空值
SELECT ename FROM emp WHERE empno NOT IN (SELECT mgr FROM emp WHERE mgr IS NOT NULL); |
SELECT ename FROM emp WHERE empno NOT IN (SELECT nvl(mgr,0) FROM emp); |