嵌套查询的分类-相关子查询与不相关子查询
2012-03-29 12:09
162 查看
子查询一定要用()包围
一.一个select...From...Where查询语句块可以嵌套在另一个select...From...Where查询块的Where子句
中,称为嵌套查询。外层查询称为父查询,主查询。内层查询称为子查询,从查询。
子查询可以嵌套多层,子查询查询到的结果又成为父查询的条件。子查询中不能有order by分组语句。(因为子查询只是个中间结果,分组等是作用于最后的结果拥有显示)
先处理子查询,再处理父查询。
二不相关子查询1。简单嵌套查询
查询选修课程号为'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
2。带[not] in的嵌套查询
只要主查询中列或运算式是在(不在)子查询所得结果列表中的话,则主查询的结果为我们要的数据
select sales_id,tot_amt
from sales
where sale _id in(select sale_id from employee where sex='F')
where sno not in(Select distinct sno from sclass)
3。 带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)
这是个嵌套子查询!
4.select ... where 列或运算式 比较运算运算【any|all](子查询)
只要主查询中列或运算式与子查询所得结果中任一(any)或全部(all)数据符合比较条件的话则主查询的结果为我们要的数据
select sale_id,tot_amt
from sales
where tot_amt>any(select tot_amt from sales where sale_id='e0013'and 'order_date='1996/11/10')
选出不同的人金额最高的订单
select * from sales a
where tomat=(select max(totmat) from sales where name=a.name)
三:相关子查询([b]多值子查询)[/b]1>非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询,并且它是优先于外部查询先执行的,他执行了再执行外部。
Select * from dba_users where rownum<=5; --是可以的,但Select * from dba_users where rownum>=5; --将不返回任何记录
但我们可以用一个子查询来解决这个问题:
select * from (select rownum rownumber,username,user_id,password from dba_users where rownum <= 3) t where t.rownumber >= 2;
这是一个不相关子查询,因为子查询只执行了一次
2>相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。并且是外部先查询一次,然后再执行一次内部查询!(由于他执行查询的次数多,可见他的效率并不高,可以用存储过程来代替他)
还是没有弄的太明白(现在弄明白了些了)
相关文章推荐
- SQL2000中在查询后的记录集合继续查询相关的记录(嵌套查询)
- 嵌套查询:相关子查询和非相关子查询
- Eclipse LogCat相关 (1.Unexpected value from nativeGetEnabledTags: 0 2.LogCat日志不出现 3.建立日志分类快速查询标签)
- Elasticsearch 查询某些分类下相关的搜索
- 数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结。
- sql相关子查询的一个小知识点
- Gi分支-分支的查询相关命令
- 根据ID集合查询符合某种类型的用户信息,并按其他类型分类
- mysql 查询所有子节点的相关数据
- [每日一题] OCP1z0-047 :2013-08-08 相关子查询中EXISTS的使用.....................................28
- ASP无限级分类原理、数据库结构设计、应用及相关函数
- 相关子查询 与非相关子查询
- [原]SQL相关路径查询脚本
- mongodb查询之从多种分类中获取各分类最新一条记录
- 无分类域间路由选择相关计算题
- 使用分组查询学生相关信息
- 查询SQL相关信息
- 多分类产品查询
- mybatis的嵌套查询(嵌套查询nested select和嵌套结果nested results查询)区别
- mssql根据分类查询每个分类前100条数据 表名m_data,分类字段名m_type