这有效:
SELECT * FROM users ORDER BY id LIMIT 5
这不会 - 抛出语法错误:
SELECT * FROM users LIMIT 5 ORDER BY id
SQL似乎对子句顺序过于严格。
是否有充分的理由要严格要求?
P.S。 SELECT和FROM指定数据的来源,我同意这应该在查询中具有特定的位置。但是,其他条款只是“玩”了这些数据 - 它们与数据源有关系,但彼此没有关系,所以它们应该以特定的方式排序对我来说似乎不太直观
答案 0 :(得分:6)
你是否选择了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出现了 这种时尚。
答案 1 :(得分:2)
当您使用英语或其他语言书写时,您还使用特定的语法。 你从不把动词放在句子的末尾,而是用英语。
在SQL中,您必须遵守相同的语法
您也不会编写类似FROM user SELECT * ORDER BY xy WHERE a=b
答案 2 :(得分:0)
因为这是MySQL的语法: http://dev.mysql.com/doc/refman/5.0/en/select.html
答案 3 :(得分:0)
解析器是为了速度而构建的。如果允许不一致的语法,解析器需要更多时间来确定需要完成的工作。这可能会对性能产生重大影响。
此外,它使人们更容易阅读。
答案 4 :(得分:0)
除了LIMIT(例如,SQL Server中的TOP),SQL语句的逻辑处理ORDER反映了语法顺序
如果用TOP替换LIMIT那么很明显
答案 5 :(得分:-1)
首先,让我告诉你
“每种语言都有其规则和规则”
我们需要遵守这条规则。违反任何命令的任何规则(例如语法)都会导致错误。
使用ORDER BY
子句指定要评估规则左侧的单元格的顺序。 expr必须解析为维度或度量列。如果未指定ORDER BY
子句,则顺序默认为DIMENSION BY
子句中指定的列的顺序。
点击此处了解更多信息: