sql查询之嵌套查询

嵌套查询也叫子查询,一个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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值