mysql执行顺序和oracle执行顺序_Oracle-SQL语句的语法顺序和执行顺序

SQL语句的语法顺序和执行顺序了,我们常见的SQL语法顺序如下:

SELECT DISTINCT

FROM [left_table]

JOIN

ON

WHERE

GROUP BY

WITH

HAVING

ORDER BY

而数据库引擎在执行SQL语句并不是从SELECT开始执行,而是从FROM开始,具体执行顺序如下(关键字前面的数字代表SQL执行的顺序步骤):

(8)SELECT (9)DISTINCT (11)

(1)FROM [left_table]

(3) JOIN

(2) ON

(4)WHERE

(5)GROUP BY

(6)WITH

(7)HAVING

(10)ORDER BY

从上面可以看到SELECT在HAVING后才开始执行,这个时候SELECT后面列的别名只对后续的步骤生效,而对SELECT前面的步骤是无效的。所以如果你在WHERE,GROUP BY,或HAVING后面使用列的别名均会报错。

我们举例测试一下。

示例表Customers结构及数据如下:

f9c3a99b9ccbd04fd40f4d20c0ff5d70.png

1、WHERE后面不使用别名的情况

SELECT

姓名 AS Name,

地址 AS Address,

城市 AS City

FROM Customers

WHERE 城市='广州'

结果如下:

493451e251046c50a31692fc1948a974.png

2、WHERE后面使用列别名的情况

SELECT

姓名 AS Name,

地址 AS Address,

城市 AS City

FROM Customers

WHERE City='广州'

执行结果如下:

9ba3b64defd0e9d4800fe791e058ba3c.png

从返回的消息中我们可以看到,重命名后的City并不能被WHERE识别,所以才会报“列名'City'无效”的提示。

其他关键字大家也可以使用上述方法进行测试,下面我们测试GROUP BY和HAVING后面使用列别名的情况。

3、测试GROUP BY后使用列别名

SELECT

城市 AS City

FROM Customers

GROUP BY City

结果如下:

1266c02cf8df947d980c9860487823d7.png

4、测试HAVING后使用列别名

SELECT

城市 AS City

FROM Customers

GROUP BY 城市

HAVING COUNT(City)>1

结果如下:

267b5c08c5043a7fdcaf34f0c8f95187.png

注意:本文是以标准SQL来测试的,MySQL的HAVING 能使用列别名,是因为对此做了扩展,必须开启ONLY_FULL_GROUP_BY才可以。

5、测试ORDER BY后面使用列别名

SELECT

姓名 AS Name,

地址 AS Address,

城市 AS City

FROM Customers

ORDER BY City

结果如下:

f2a3d45022c6213a9f63ac88247bde92.png

从上面的几个测试示例的结果中,可以得出我们的结论是正确的:ORDER BY子句是唯一能重用列别名的一步。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值