- 问题提出:
为什么order by可以用select后的列别名,而where子句中却不行
解答:
这和SQL语句的执行顺序有关,从microsoft对于MSSQL的说明书就可以知道了(Microsoft中的说明, 如下图所示)
截图中的部分语句也解答了这一问题。SELECT子句是步骤8,该子句中定义的任何列别名或派生列都不能被前面的子句引用。但是,它们可以由后续子句(例如ORDER BY子句)引用。
因此,位于select后面的order by 可以使用select后面的列别名,而where,由于位于select前面,故无法使用列别名
- 问题提出:
sql语句中,order by为什么可以用没有在select中出现的列进行排序,之前的select子句不是把未出现的列筛掉了吗?
问题举例:
假设我有如下表格t1(id, col1, col4)