在几乎所有的正规结构的信息集合,你开始读无论是从接近尾声的开始,或者偶尔从朝开始结束(街道地址,例如)。但在SQL,尤其是SELECT查询,为了正确理解其含义,你在中间开始,在FROM子句。这可以使长的查询非常难读,尤其是如果它包含嵌套SELECT查询。

通常在编程的东西时好像并没有任何意义,还有它背后有历史原因的。与SELECT,而不是从开始就没有意义了。有谁知道它是那么做的原因是什么?

有帮助吗?

解决方案

SQL维基百科条目简要介绍一些历史:

  

20世纪70年代,一组在IBM圣何塞研究实验室开发的R系统关系数据库管理系统的基础上,由埃德加·科德在他的论文中介绍的模型,“数据的大型共享数据的关系模型”。唐纳德D.伯林和IBM的雷蒙德F.博伊斯随后创建的结构英语查询语言(SEQUEL)以操纵和管理存储在系统数据R.缩写SEQUEL后改为SQL,因为“SEQUEL”是英国霍克西德利飞机公司的商标。

在原始名称中明确提到的,说明的语法。

挖得更深一些,我们发现 FLOW-MATIC 的编程语言。

  

FLOW-MATIC,最初被称为B-0(商务语言版本0),的是可能的第一英类数据处理语言即可。它的发明和由Grace霍珀指定,商业变种的发展在1955年雷明顿·兰德开始了UNIVAC一到了1958年,编译器及其文档都普遍提供被用于商业用途。

FLOW-MATIC是面向商业的通用语言背后的灵感,一个最古老的编程语言仍然在积极使用。与精神,的续集的设计采用类似英语的语法(20世纪70年代是现代,与20世纪50年代和60年代相比)。

在角度来看,“现代”编程系统仍然使用访问古老的观念背后的数据库

MULTIPLY PRICE BY QUANTITY GIVING COST.

其他提示

我觉得其中一个SQL语句的结构方式具有逻辑意义就英语的句子结构。基本上

I WANT THIS
FROM HERE
WHERE WHAT I WANT MEETS THESE CRITERIA

我不认为它使多大意义,在英国至少,说

FROM HERE
I WANT THIS
WHERE WHAT I WANT MEETS THESE CRITERIA  

我必须不同意。 SQL语法不是由内向外的。

非常先来看看的你可以告诉查询是否将SELECT,INSERT,UPDATE或DELETE数据(SQL的所有的休息,如DDL,省略目的)。


回到你的SELECT语句的困惑:SQL的目的是要的声明的。这意味着你表达你想要什么,而不是你想怎么它。因此,它使每一个有意义的第一的状态,你想要什么(列表中的属性你的选择的荷兰国际集团)和然后的提供DBMS与一些附加上,其中应抬头FROM资讯

在最后放置WHERE子句了重大意义太:设想一个漏斗,宽在顶部,底部窄。通过对声明的末尾添加一个WHERE子句,你窒息下来产生的数据量。否则将限制查询任何地方比在底部将要求开发商扭转他们的头。


ORDER BY子句在最后:一旦数据已通过漏斗消失了,对它进行排序

JOINS(JOIN条件)真正属于入FROM子句。

GROUPING:基本上通过漏斗运行数据它进入另一个漏斗之前

SQL语法时才是甜的。没有什么里面出来了。也许这就是为什么SQL是即使经过了这么几十年如此受欢迎。这是相当容易掌握,并弄明白。 (虽然我曾经面对这花了我相当长的一段围绕让我的头7页(A4尺寸)的SQL语句。)

它的设计,为英语等。我认为这是主要的原因。

作为边注,记得LINQ的初始预览之后(select ... from ...)直接建模。这在后来的预告更改为更类似的编程语言(这样的范围从上至下)。安德斯·海尔斯伯格具体提及有关SQL这个怪异事实(这使得智能感知更硬和不匹配C#范围规则),因为它们做出这个决定的原因。

总之,好或坏,这是它是什么,它是为时已晚改变任何东西。

在SQL的合同条款的顺序是绝对逻辑。请记住,SQL是一个说明性语言,在这里你声明你想要什么,该系统计算出如何最好地得到它给你。第一句是,你列出你的结果表所需的列的SELECT子句。这是查询的主要目的。在阐述你想要的结果的样子,你的下一个状态,其中的数据应该来自于什么。 where子句限制要返回的数据的量。有在思考如何,除非你知道它从何而来限制你的数据是没有意义的,所以以后去from子句。 group by子句可与SELECT子句中的集成算可以去任何地方后FROM子句但它是不如想想该过滤的数据聚集,所以它涉及的where子句后。 having子句有来了group by子句后。 order by子句是关于数据的呈现方式,可能之后选择去任何地方。

这是用具有动词(CREATEDROPUPDATE等)每条语句启动SQL语法的其余部分保持一致。

首先具有列名单的主要缺点是,它是不方便自动完成(如Hejlsberg已经提及),但这并不是语法何时在20世纪70年代设计的一个问题。

我们可以有最好与像SELECT FROM SomeTable: ColumnA, ColumnB语法左右逢源,但为时已晚,现在来改变它。

总之,SQL的SELECT语句中的顺序不是唯一的。它完全相符了Python列表解析的:

[(rec.a, rec.b) for rec in data where rec.a > 0]

抛开语言的历史(虽然它是迷人的),我认为你缺少的东西是,SQL是不是要告诉系统做什么,这么多的结果是你想要的结束(和它的数字如何做到这一点)

说“去那边那个架子,拿起与hatbands的帽子,蓝色的帽子,再绿色,然后红色,并把他们给我”非常多告诉系统如何即可做你想做的。它的程序员认为的,我们假定工人是非常愚蠢的,需要微小的详细说明。

SQL首先开始与最终结果,你想要的数据,该列的顺序,等等。这是非常人谁是建设一个报告的观点。 “我想名字,姓氏,然后年龄,然后......”这是后发出请求的所有目的。因此,它开始与你想要的结果的格式。然后它进入您预期的位置找到的数据,以寻找什么标准时,为了呈现它,等等。

所以作为替代在微小的细节你想要的工人做什么指定,SQL假设系统知道如何做到这一点,和中心更多你想要什么。

因此,不是迂腐告诉你的工人去这里,得到这个,把它在那里..它更像是说“我想的帽子,从12架,其中有hatbands,并请按颜色分类。”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top