postgresql SQL中的列ORDER BY CLAUSE不存在于SELECT语句中

2ekbmq32  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(163)

根据SQL的执行顺序,ORDER BY在select语句之后的最后执行。但是,我们可以使用SELECT语句中不存在的列按结果进行排序。这不是和行刑顺序相矛盾吗SELECT语句后不存在的列用于排序依据?
想得到解释

cotxawn7

cotxawn71#

如果ORDER BY在SELECT中没有提到的东西,查询计划器基本上将它作为幻影列放入SELECT中。这就是为什么按非SELECTed表达式(列或公式)排序有效的原因。
请记住,SQL是一种声明性语言,可能是我们大多数程序员使用的唯一声明性语言。我们告诉SQL我们想要什么,而不是如何得到它。查询计划器要弄清楚
a)我们所要求的是否是格式良好的和可能的。
(B)如何获得。
我们程序员被其他语言训练成程序化思维。我们不告诉机器我们想要什么,我们告诉它如何得到它。但是这种训练对于SQL并没有什么用处。(它对于优化查询很有用,但优化首先要查看EXPLAIN显示的查询计划。)

相关问题