嵌套查询也叫子查询,一个SELECT语句的查询结果能够作为另外一个语句的输入值。子查询不但可以出现在WHERE子句中,也能出现在FROM中作为一个临时表使用,而且还可以出现在SELECT LIST中,作为一个字段值来返回。
1、单行子查询:单行子查询的返回值只有一行数据。可以再主查询语句的条件语句中引用子查询返回的结果,但须使用单行比较符合(=、>、<、>=、<=、<>)来进行比较。
例如:
SELECT e.* from emp e
where deptno=(select dempno from dept where d_name='PRODUCT');
2、多行子查询:多行子查询即是子查询的结果为多行数据 。当主查询语句的条件语句中引用子查询结果时必须使用多行比较符号(IN , ALL , ANY)来进行比较。
注意:ALL和ANY需要和单行比较符(=、>、<、>=、<=、<>)结合使用。ALL必须要符合子查询的所有值,ANY符合子查询结果中的任何一个值即可。
例如:
--查出分数比所有名字为‘aa’的人分数都高的人
SELECT stName FROM STUDENT S1
WHERE S1.SCORE > ALL(SELECT SCORE FROM SCORE WHERE P_NAME='aa');
--查出分数比名字为‘aa’的人中任意一个分数高的
SELECT stName FROM STUDENT S1
WHERE S1.SCORE > ANY(SELECT SCORE FROM SCORE WHERE P_NAME='aa');
3、多列子查询:当是单行多列的子查询时,主查询语句的条件语句中引用子查询结果时可用单行比较符号(=、>、<、>=、<=、<>)来进行比较;当时多行多列子查询时,主查询语句的条件语句中引用子查询结果时必须用多行比较符号(IN , ALL , ANY)来进行比较。
例如:
SELECT dempno,ename,job,sal
FROM emp
WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) FROM emp GROUP BY dempno);
4.在SELECT LIST中嵌套子查询的使用方法:
例如:--主查询中每扫描一行就会遍历一次TABLE_NAME1表,找出主表ID和TABLE_NAME1中的filed_id相等的
SELECT d.* ,(select R.cap_id FROM TABLE_NAME1 R
WHERE R.filed_id =d. id ) AS capId
FROM TABLE_NAME2 d