为什么SQL严格关于子句顺序?

时间:2011-03-23 14:01:26

标签: sql sql-order-by language-design grammar clause

这有效:

SELECT * FROM users ORDER BY id LIMIT 5

这不会 - 抛出语法错误:

SELECT * FROM users LIMIT 5 ORDER BY id

SQL似乎对子句顺序过于严格。

是否有充分的理由要严格要求?

P.S。 SELECT和FROM指定数据的来源,我同意这应该在查询中具有特定的位置。但是,其他条款只是“玩”了这些数据 - 它们与数据源有关系,但彼此没有关系,所以它们应该以特定的方式排序对我来说似乎不太直观

6 个答案:

答案 0 :(得分:6)

休·达文(Hugh Darwen)认为,在20世纪60年代,语言才是这种方式的时尚:

  

你是否选择了SELECT-FROM-WHERE   被授予,或者你,像我一样,找到它   相当好奇的是System R团队   应该摒弃正常的方式   写任意的表达   有利于某事的复杂性   完全特殊的,有人可能   说,而不是独裁......?

     

事实是,在20世纪60年代各种各样   脚本语言(我们倾向于   这些日子叫这样的事情)来了   关于报告的目的   一代,特别是临时报告   代。我们有一种这样的语言   在prelational DBMS中调用   终端业务系统(TBS)我   从1969-77开始为IBM工作。我们的   语言要求用户指定   一系列的必要报告   必须在中给出的步骤   订明的订单 ......

     

有点类似,但更多   复杂的报告生成器   后来由IBM在美国开发,作为   被称为产品的一部分(prosaically,   那时候IBM的风格也是如此)   广义信息系统   (GIS)...当我第一次看到SQL时,   我的直接反应是“哦不!   GIS的儿子?请不要那样!“我   可能是非常错误的   这个。我感觉到的相似性   可能是虚幻的,即使   事实并非如此,我没有确凿的证据   系统R团队中的任何人都是   熟悉GIS。事实依旧   那种固定的一般风​​格   行动的顺序是   当时的一天。我假设那个   SQL的SELECT-FROM-WHERE出现了   这种时尚。

来自HAVING a Blunderful Time

答案 1 :(得分:2)

当您使用英语或其他语言书写时,您还使用特定的语法。 你从不把动词放在句子的末尾,而是用英语。

在SQL中,您必须遵守相同的语法 您也不会编写类似FROM user SELECT * ORDER BY xy WHERE a=b

的查询

答案 2 :(得分:0)

答案 3 :(得分:0)

解析器是为了速度而构建的。如果允许不一致的语法,解析器需要更多时间来确定需要完成的工作。这可能会对性能产生重大影响。

此外,它使人们更容易阅读。

答案 4 :(得分:0)

除了LIMIT(例如,SQL Server中的TOP),SQL语句的逻辑处理ORDER反映了语法顺序

  1. FROM
  2. WHERE
  3. GROUP BY
  4. CUBE / ROLLUP
  5. HAVING
  6. 选择
  7. DISTINCT
  8. TOP / LIMIT
  9. ORDER BY
  10. 如果用TOP替换LIMIT那么很明显

答案 5 :(得分:-1)

首先,让我告诉你

  

“每种语言都有其规则和规则”

我们需要遵守这条规则。违反任何命令的任何规则(例如语法)都会导致错误。


使用ORDER BY子句指定要评估规则左侧的单元格的顺序。 expr必须解析为维度或度量列。如果未指定ORDER BY子句,则顺序默认为DIMENSION BY子句中指定的列的顺序。

点击此处了解更多信息: