返回信息流在Oracle中,select 语句的执行顺序是:
1. from语句
2. where语句(结合条件)
3. start with语句
4. connect by语句
5. where语句
6. group by语句
7. having语句
8. model语句
9. select语句
10. union、minus、intersect等集合演算演算
11. order by语句
楼主一问就去查了查,不难理解啊[ema13]
这是一条镜像帖。来源:北邮人论坛 / python / #18271同步于 2017/7/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
Re: 为什么where语句不能使用列别名
buptxiaomiao
2017/7/10镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
【 在 buptxiaomiao 的大作中提到: 】
: 在Oracle中,select 语句的执行顺序是:
: 1. from语句
: 2. where语句(结合条件)
: ...................
执行顺序之前,至少需要经过一个parser吧,在这个parser处进行名称替换就可以了。不过我怀疑替换引起的后果具体是什么。
SQL怎么解释执行还真不清楚[ema25]
我查一查去嗯...
【 在 Dogless (【意涵团】一杯莫扎特) 的大作中提到: 】
: 执行顺序之前,至少需要经过一个parser吧,在这个parser处进行名称替换就可以了。不过我怀疑替换引起的后果具体是什么。
SQL语句的执行过程是一个筛选过程,执行顺序就是如1L。from,where,select都是一个筛选过程,都是以一个集合作为输入,输出另一个范围更小或者相等的集合。
select语句执行在where后面,所以在where执行的时候,并不知道在select语句中对列名已经声明别名,所以无法识别。order语句在select之后,所以可以用列别名。
按道理来讲,可以在where语句之前先检测一下select中的列别名,但是之后还要按照select语句进行筛选,所以从效率的角度上来说没有必要吧(个人理解)
另外,select语句和where的先后顺序应该也是有说法的,应该都是从效率来看的吧
【 在 Dogless (【意涵团】一杯莫扎特) 的大作中提到: 】
: 执行顺序之前,至少需要经过一个parser吧,在这个parser处进行名称替换就可以了。不过我怀疑替换引起的后果具体是什么。