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