嵌套查询:相关子查询与非相关子查询

2019-12-30  本文已影响0人  mayiwoaini

转自:https://blog.csdn.net/qq_26937525/article/details/53930498

嵌套查询

一个select…From…Where查询语句块可以嵌套在另一个select…From…Where查询块的Where子句中,称为嵌套查询。
外层查询称为父查询,主查询。内层查询称为子查询,从查询。
子查询可以嵌套多层,子查询查询到的结果又成为父查询的条件。
关于子查询注意:

#非相关子查询

简单嵌套查询
查询选修课程号为’101’并且成绩高于学生号为’9501101’的所有学生的成绩。

select * from sclass 
where cno='101' and degree>=(select degree from sclass where sno='9501101'and cno='101')
-------------------------------------------------------
当子查询跟随在 =、!=、<、<=、>、>=之后,子查询的返回值只能是一个, 否则应在外层where子句中用一个in限定符,即要返回多个值,要用in或者not in

带[not] in的嵌套查询
只要主查询中列或运算式是在(不在)子查询所得结果列表中的话,则主查询的结果为我们要的数据

select sales_id,tot_amt
from sales 
where sale _id  in(select sale_id from employee where sex='F')

相关子查询

带exists的嵌套查询
子查询的结果至少存在一条数据时(exists),或子查询的结果找不到数据时(not exists),则主查询的结果为我们要的数据。
以下范例让你找出滞销的产品,也就是尚未有任何销售记录的库存产品。此范例主要是查询以库文件中的每一条产品代码到销售明细表中去查询,如果查询不到任何一条,表示该产品未曾卖出任何一件。

select * from stock a
where not exists(select * from sale_item b where a.prod_id=b.prod_id and a.stup_id=b.stup_id)

非相关子查询和相关子查询区别

上一篇 下一篇

猜你喜欢

热点阅读