SQL嵌套SELECT语句的⽤法-
SQL嵌套SELECT语句是很常见的SQL语句,下⾯就为您详细介绍嵌套SELECT语句的语法,并附相关⽰例,供您参考学习之⽤。
嵌套SELECT语句也叫⼦查询,⼀个SELECT 语句的查询结果能够作为另⼀个语句的输⼊值。⼦查询不但能够出现在Where⼦句中,也能够出现在from⼦句中,作为⼀个临时表使⽤,也能够出现在select list中,作为⼀个字段值来返回。
1、单⾏⼦查询:单⾏⼦查询是指⼦查询的返回结果只有⼀⾏数据。当主查询语句的条件语句中引⽤⼦查询结果时可⽤单⾏⽐较符号(=, >, <, >=, <=, <>)来进⾏⽐较。
例:
1. select ename,deptno,sal
2. from emp
3. where deptno=(select deptno from dept where loc='NEW YORK');
2、多⾏⼦查询:多⾏⼦查询即是⼦查询的返回结果是多⾏数据。当主查询语句的条件语句中引⽤⼦查询结果时必须⽤多⾏⽐较符号
(IN,ALL,ANY)来进⾏⽐较。其中,IN的含义是匹配⼦查询结果中的任⼀个值即可("IN" 操作符,能够测试某个值是否在⼀个列表中),ALL则必须要符合⼦查询的所有值才可,ANY要符合⼦查询结果的任何⼀个值即可。⽽且须注意ALL 和ANY 操作符不能单独使⽤,⽽只能与单⾏⽐较符(=、>、< 、>= 、<= 、<>)结合使⽤。
例:
1).多⾏⼦查询使⽤IN操作符号例⼦:查询选修了⽼师名叫Rona(假设唯⼀)的学⽣名字
1. sql> select stName
2.
3. from Student
4.
5. where stId in(selectdistinct stId from score where teId=(select teId from teacher where teName='Rona'));
查询所有部门编号为A的资料:
1. SELECT ename,job,sal
2.
3. FROM EMP
4.
5. WHERE deptno in ( SELECT deptno FROM dept WHERE dname LIKE 'A%');
2).多⾏⼦查询使⽤ALL操作符号例⼦:查询有⼀门以上的成绩⾼于Kaka的最⾼成绩的学⽣的名字:
1. sql> select stName
2.
3. from Student
select distinct from
4.
5. 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操作符号例⼦:查询有⼀门以上的成绩⾼于Kaka的任何⼀门成绩的学⽣的名字:
1. sql> select stName
2.
3. from Student
4.
5. 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、多列⼦查询:当是单⾏多列的⼦查询时,主查询语句的条件语句中引⽤⼦查询结果时可⽤单⾏⽐较符号(=, >, <, >=, <=, <>)来进⾏⽐较;当是多⾏多列⼦查询时,主查询语句的条件语句中引⽤⼦查询结果时必须⽤多⾏⽐较符号(IN,ALL,ANY)来进⾏⽐较。
例:
1. SELECT deptno,ename,job,sal
2. FROM EMP
3. WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) FROM EMP GROUP BY deptno);
4、内联视图⼦查询
例:
1. (1)SELECT ename,job,sal,rownum
2. FROM (SELECT ename,job,sal FROM EMP ORDER BY sal);
3. (2)SELECT ename,job,sal,rownum
4. FROM ( SELECT ename,job,sal FROM EMP ORDER BY sal)
5. WHERE rownum<=5;
5、在HAVING⼦句中使⽤⼦查询
例:
1. SELECT deptno,job,AVG(sal) FROM EMP GROUP BY deptno,job HAVING AVG(sal)>
(SELECT sal FROM EMP WHERE ename='MARTIN');

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。