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

Ema*_*sev 2 sql grammar language-design sql-order-by clause

这有效:

SELECT * FROM users ORDER BY id LIMIT 5
Run Code Online (Sandbox Code Playgroud)

这不会 - 抛出语法错误:

SELECT * FROM users LIMIT 5 ORDER BY id
Run Code Online (Sandbox Code Playgroud)

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

有这么严格的理由吗?

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

one*_*hen 6

Hugh Darwen认为,在20世纪60年代语言成为时尚的时尚:

你认为SELECT-FROM-WHERE是理所当然的,或者你和我一样,发现它很奇怪System R团队应该摒弃编写任意复杂表达式的正常方式,转而支持一些完全特殊的东西,有人可能会说而非独裁......?

事实是,在20世纪60年代,各种脚本语言(我们现在倾向于称之为这样的事情)的出现是为了报告生成,特别是临时报告生成.我们在前期DBMS中有一种这样的语言叫做终端业务系统(TBS),我从1969-77开始为IBM工作.我们的语言要求用户在必须按照规定的顺序给出的一系列步骤中指定所需的报告...

IBM后来在美国开发了一个类似但更复杂的报告生成器,作为产品的一部分(当时称为IBM的风格)广义信息系统(GIS)......当我第一次看到SQL时,我的直接反应是"哦不!地理信息系统的儿子?请不要那样!" 我可能对此非常不对劲.我认为的相似性可能是虚幻的,即使不是,我也没有确凿的证据证明System R团队中的任何人都熟悉GIS.事实仍然是,固定行动顺序的一般风格是当时的一天.我假设SQL的SELECT-FROM-WHERE出现了这种方式.

HAVING一个大错的时间