34.Oracle的嵌套子查询

 

1.Oracle的嵌套子查

v_sql:='select * from (select t1.*,rownum rn from (select * from '|| tablename

||') t1 where rownum<='||v_end ||' ) where rn>='||v_begin ;

===è首先按照执行sql语句的顺序,先是最里面的select语句先执行,rownum是oracle本身就有得语句,

1:加载到from的时候,就去加载from后面的表,from没有表,所以就加载他的子查询,然后就是里面的数据,加载子查询里面的where也会先执行。

2:

3:

这样就出来了。结果就是所有的数据里面先是5行。

Oracle的子查询分为两类分别是嵌套子查询和相关子查询,这里要介绍的是嵌套子查询。
所谓嵌套子查询是指,子查询是一个独立的查询不与外部查询相关,子查询将被先执行,而且只被执行一次,子查询执行完成后,再执行外部的查询,外部查询在执行过程中会使用到子查询的结果。
下面是一个嵌套子查询的例子:
select ename,sal
from emp
where sal >
(select avg(sal) from emp);

执行顺序:
其含义是找出在emp员工中所有工资要高于平均水平的员工的姓名和工资
在这里oracle将会先执行select avg(sal) from emp这个子查询然后,然后在执行外部的查询。
对于嵌套在查询有几点需要注意:
1. 子查询一定要包含在一对括号内。
2. 将子查询放在比较运算符的右边
3. “order by”在子查询中是不需要,除非当你想使用一个top-n的分析
4. 当你的子查询结果预计只有一个时请使用单行操作符,当你的子查询结果预计有多个时,请使用多行操作符。
这里所谓的当行操作符就是我们常用的(>,<,>=,<=,<>等等),所谓多行操作符就是在oracle的子查询中使用in,all,any,some,not in等等
例如下面这段SQL语句的意义是找出那些deptno为20的人的姓名和工资
Select ename,sal
From emp
Where empno in
(
Select empno from emp where deptno = 20
);
当然这里我们完全没有必要使用子查询,之所以在这里用了子查询是因为,我们说明这里的子查询返回了多个结果,我们必须使用多行操作符。

子查询的效率要低于关联的那种。

2:oracle中常用的系统类的东西

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值