Oracle 中 SQL 语句执行顺序

Oracle SQL 语句一般写法顺序

(8) select  (9) distinct (11)

(1) from

(3) join

(2) on

(4) where

(5) group by

(6) with { cube | rollup }

(7) having

(10) order by

    以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会给调用者。如果没有在查询中指定某一个子句,将跳过相应的步骤。

SQL 语句执行顺序如下:

  1. from:对 from 子句中的表执行笛卡尔积(交叉联接),生成虚拟表 VT1
  2. on:对 VT1 应用 on 筛选器,只有那些值为真才被插入到 VT2
  3. outer(join):如果指定了 outer join(相对于 cross join 或 inner join),保留表中未找到匹配的行将作为外部行添加到 VT2,生成 VT3。如果 from 子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤 1 到步骤 3,直到处理完所有的表位置。
  4. where:对 VT3 应用 where 筛选器,只有使为 true 的行才插入VT4。
  5. group by:按 group by 子句中的列列表对 VT4 中的行进行分组,生成 VT5。
  6. cute | rollup:把超组插入 VT5,生成 VT 6。
  7. having:对 VT6 应用 having 筛选器,只有使为 true 的组插入到 VT7。
  8. select:处理 select 列表,产生 VT8
  9. distinct:将重复的行从 VT8 中删除,产生 VT9。
  10. order by:将 VT9 中的行按 order by 子句中的列列表顺序,生成一个游标(VC10),生成表 VT11,并返回给调用者。

   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值