AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 231745
Accepted
Raymond Nijland
Raymond Nijland
Asked: 2019-03-10 10:52:57 +0800 CST2019-03-10 10:52:57 +0800 CST 2019-03-10 10:52:57 +0800 CST

子查询(派生表)中的 ORDER BY 用法 SQL 标准是否允许

  • 772

MariaDB 文档提到ORDER BYSQL 标准从不允许子查询(派生表)中的子句。

含义 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,所以问题是我解释正确吗?

sql-standard
  • 1 1 个回答
  • 1919 Views

1 个回答

  • Voted
  1. Best Answer
    jmoreno
    2019-03-10T12:56:55+08:002019-03-10T12:56:55+08:00

    游标不是表,它指的是表或该表的视图。游标的顺序仅在定义游标的查询具有排序依据的范围内。该较大查询中的子查询不会定义顺序,并且查询用于游标的事实不会按照子查询的合法语法进行排序。

    基本上,与任何其他查询一样,如果您在最外层没有 order by,则优化器可以自由地以它认为最简单/最快的方式返回结果。它可以利用索引或缓存或任何其他允许它产生正确结果的东西,但不限于这样做。

    • 2

相关问题

  • 在哪里可以找到 SQL 标准文档?

  • 这个查询的正确结果是什么?

  • ANSI/ISO 计划 LIMIT 标准化?

  • 根据 SQL92 规范,我可以将值 1 存储在 precision = scale 的字段中吗?

  • 顶级数据库供应商的 SQL (DML-) 方言之间有何不同?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve