①嵌套查询
嵌套查询也称为子查询或内层查询。故名思意,嵌套查询就是两个查询嵌套在一起,即一个查询嵌套在另一个查询的where语句或者having语句中,其中子查询先执行的到结果作为外层查询(父查询)的查询条件。
而嵌套查询又可分为单行查询和多行查询和多列查询:
单行查询:
子查询的返回结果数为一,而针对单行查询的运算符有:>、=、>=、、<=
多行查询:
子查询的返回结果为一个或者多个,针对多行查询的运算符有:IN、ANY、ALL。
IN : 判断是否与子查询 的任意一个返回值相同
ANY : 表示和子查询的任意一行结果进行比较,有一个满足 条件即可。用法有 <ANY =ANY >ANY
可用于查询 一个对象的属性大于 、小于 、等于其他对象的其中一个的某一属性就行的情况。
ALL : 表示和子查询的所有行结果进行比较,每一行必须都 满足条件。 用法有 <ALL =ALL >ALL
可用于查询 一个对象的属性对于其他对象的属性都大于 、小于 、等于的情况。
③多列子查询
多列子查询可以在一个条件表达式内同时和子查询的多个 列进行比较。 多列子查询通常用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';
上面就是子查询的类别,那子查询是可以用在哪些语句。
①where语句
②having语句
③from语句
where和having比较熟这里就不讲了。
from有用法如下,
例如:SELECT a.ename, a.sal, a.deptno, b.salavg
FROM emp a, ( SELECT deptno, avg(sal) salavg
FROM emp
GROUP BY deptno) b
WHERE a.deptno = b.deptno
AND a.sal > b.salavg;
这种就是把子查询的结果当成一个表名为b进行使用。