MariaDB 文档提到ORDER BY
SQL 标准从不允许子查询(派生表)中的子句。
含义 SQL 查询
SELECT
field1
, field2
FROM (
SELECT
field1
, field2
FROM
table1
ORDER BY field2
) alias
SQL 标准从不允许
根据 SQL 标准,“表”(以及 FROM 子句中的子查询)是一组无序的行。表中的行(或 FROM 子句中的子查询)没有任何特定的顺序。这就是优化器可以忽略您指定的 ORDER BY 子句的原因。事实上,SQL 标准甚至不允许 ORDER BY 子句出现在这个子查询中
见源
但是当我查看 SQL 92 标准时。(我知道它很旧)
4.9 表格
...
...
表可以是基表、查看表或派生表。 基表可以是持久基表、全局临时表、已创建的本地临时表或已声明的本地临时表。
...
...
派生表是通过评估 a 直接或间接从一个或多个其他表派生的表<query expression>
。派生表的值派生自评估时基础表的<query expression>
值。
……
_派生表和游标的简单基础表在子条款 7.9、
"<query specification>"
……、子条款 7.10、……"<query expression>"
和子条款 13.1 ……中定义"<declare cursor>"
。查看的表没有简单的基础表。
他们提到游标,让我们看看他们对游标的看法以及它们是什么。
4.21 光标
……
_处于打开状态的游标标识一个表、该表的行的顺序以及相对于该顺序的位置。如果
<declare cursor>
不包含<order by clause>
,或包含<order by clause>
不完全指定行顺序的 ,则表的行具有仅在<order by clause>
指定顺序的范围内定义的顺序,否则依赖于实现。
所以他们在这里提到处于打开状态的游标可以是表,可以是基表、查看表或派生表。如果您在第 4.9 节表中查看他们如何定义表是什么
如果我读到这篇文章,我可能会将其解释为ORDER BY
在派生表中使用(如上面的 SQL 查询)对于 SQL 标准是完全有效的,这取决于供应商是否允许将ORDER BY
其作为选项。
但我会解释错英语不是我的母亲 laungauge,所以问题是我解释正确吗?