SQL嵌套SELECT語句的用法
SQL嵌套SELECT語句是很常見的SQL語句,下面就為您詳細(xì)介紹SQL嵌套SELECT語句的語法,并附相關(guān)示例,供您參考學(xué)習(xí)之用。
嵌套SELECT語句也叫子查詢,一個(gè)SELECT 語句的查詢結(jié)果能夠作為另一個(gè)語句的輸入值。子查詢不但能夠出現(xiàn)在Where子句中,也能夠出現(xiàn)在from子句中,作為一個(gè)臨時(shí)表使用,也能夠出現(xiàn)在select list中,作為一個(gè)字段值來返回。
1、單行子查詢 :?jiǎn)涡凶硬樵兪侵缸硬樵兊姆祷亟Y(jié)果只有一行數(shù)據(jù)。當(dāng)主查詢語句的條件語句中引用子查詢結(jié)果時(shí)可用單行比較符號(hào)(=, >, <, >=, <=, <>)來進(jìn)行比較。
例:
- select ename,deptno,sal
- from emp
- where deptno=(select deptno from dept where loc='NEW YORK');
2、多行子查詢:多行子查詢即是子查詢的返回結(jié)果是多行數(shù)據(jù)。當(dāng)主查詢語句的條件語句中引用子查詢結(jié)果時(shí)必須用多行比較符號(hào)(IN,ALL,ANY)來進(jìn)行比較。其中,IN的含義是匹配子查詢結(jié)果中的任一個(gè)值即可("IN" 操作符,能夠測(cè)試某個(gè)值是否在一個(gè)列表中),ALL則必須要符合子查詢的所有值才可,ANY要符合子查詢結(jié)果的任何一個(gè)值即可。而且須注意ALL 和ANY 操作符不能單獨(dú)使用,而只能與單行比較符(=、>、< 、>= 、<= 、<>)結(jié)合使用。
例:
1).多行子查詢使用IN操作符號(hào)例子:查詢選修了老師名叫Rona(假設(shè)唯一)的學(xué)生名字
- sql> select stName
- from Student
- where stId in(selectdistinct stId from score where teId=(select teId from teacher where teName='Rona'));
查詢所有部門編號(hào)為A的資料:
- SELECT ename,job,sal
- FROM EMP
- WHERE deptno in ( SELECT deptno FROM dept WHERE dname LIKE 'A%');
2).多行子查詢使用ALL操作符號(hào)例子:查詢有一門以上的成績(jī)高于Kaka的最高成績(jī)的學(xué)生的名字:
- sql> select stName
- from Student
- where stId in(select distinct stId from score where score >all(select score from score where stId=(select stId from Student where stName= 'Kaka') ));
3). 多行子查詢使用ANY操作符號(hào)例子:查詢有一門以上的成績(jī)高于Kaka的任何一門成績(jī)的學(xué)生的名字:
- sql> select stName
- from Student
- where stId in(select distinct stId from score where score >any(select score from score where stId=(select stId from Student where stName='Kaka')));
3、多列子查詢:當(dāng)是單行多列的子查詢時(shí),主查詢語句的條件語句中引用子查詢結(jié)果時(shí)可用單行比較符號(hào)(=, >, <, >=, <=, <>)來進(jìn)行比較;當(dāng)是多行多列子查詢時(shí),主查詢語句的條件語句中引用子查詢結(jié)果時(shí)必須用多行比較符號(hào)(IN,ALL,ANY)來進(jìn)行比較。
例:
- SELECT deptno,ename,job,sal
- FROM EMP
- WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) FROM EMP GROUP BY deptno);
4、內(nèi)聯(lián)視圖子查詢
例:
- (1)SELECT ename,job,sal,rownum
- FROM (SELECT ename,job,sal FROM EMP ORDER BY sal);
- (2)SELECT ename,job,sal,rownum
- FROM ( SELECT ename,job,sal FROM EMP ORDER BY sal)
- WHERE rownum<=5;
5、在HAVING子句中使用子查詢
例:
- SELECT deptno,job,AVG(sal) FROM EMP GROUP BY deptno,job HAVING AVG(sal)>(SELECT sal FROM EMP WHERE ename='MARTIN');
【編輯推薦】



















