嵌套查询:相关子查询和非相关子查询
2016-12-29 17:16
567 查看
嵌套查询
一个select…From…Where查询语句块可以嵌套在另一个select…From…Where查询块的Where子句中,称为嵌套查询。外层查询称为父查询,主查询。内层查询称为子查询,从查询。
子查询可以嵌套多层,子查询查询到的结果又成为父查询的条件。
关于子查询注意:
子查询中不能有order by分组语句。(因为子查询只是个中间结果,分组等是作用于最后的结果拥有显示)
子查询一定要用( )包围
非相关子查询
简单嵌套查询
查询选修课程号为’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)
这是个嵌套子查询!
非相关子查询和相关子查询区别
非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询,并且它是优先于外部查询先执行的,他执行了再执行外部。相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。并且是外部先查询一次,然后再执行一次内部查询!(由于他执行查询的次数多,可见他的效率并不高,可以用存储过程来代替他)
相关文章推荐
- 嵌套查询的分类-相关子查询与不相关子查询
- SQL2000中在查询后的记录集合继续查询相关的记录(嵌套查询)
- Linux驱动中相关函数查询
- 一种嵌套查询,变成连接查询的办法
- sql非相关子查询与相关子查询
- mysql 查询缓存相关命令
- 4.4、Libgdx使用方法查询运行环境相关属性
- oracle基本查询语句(一)用户相关语句
- Android——与查询联系人相关的3张表
- MySQL时间日期查询相关函数与方法
- SQL Server学习笔记(一)【认识SQL Server查询及分组嵌套查询】
- Oracle树查询及相关函数
- 【ORACLE】常用物化视图相关元数据查询语句
- linux查询gcc版本及相关的命令
- mysql 查询一个表中有的记录且在另一个表中无相关的记录sql
- MySQL慢查询配置,及解决相关问题
- oracle字符集相关知识(查询,修改,dmp字符集)
- 查询与全文索引相关的内部元数据sql语句
- 相关子查询和非相关子查询
- Mysql - 02 mysql数据库"查询"select相关命令