Answers:
我们了解到,大多数语言都被分类为“基于关系的”或“高级”这两种语言。
这些概念是正交的。“基于关系”是指语言的语义基于关系的概念,即两组之间的多对多关联(关系是SQL表背后的数学基础)。“高级”表示该语言包含很多抽象,这些抽象隐藏了许多底层技术细节(例如内存位置,CPU寄存器,磁盘访问,按位操作等)。SQL当然是基于关系的,因为它的主要目的是描述关系数据和基于它的操作。SQL也相当高级。它没有提供任何直接访问磁盘上字节的方法,也没有告诉您有关如何存储数据的任何详细信息(至少标准SQL不提供)。
实际上,还有更多的轴可以对编程(和数据)语言进行分类。一个特别有趣的是声明式和命令式。声明性语言描述的东西什么的 ; 命令式语言描述了如何做事情。SQL的DDL部分主要是声明,尽管必须看的关键字(” CREATE TABLE
”,‘ DROP DATABASE
’,等等),甚至是数据处理部分(SELECT
,UPDATE
,INSERT
,DELETE
)还是蛮声明。SQL的一个非常有趣的特性是它不是图灵完整的:您不能在普通标准ANSI SQL中编写无界循环。
函数式编程围绕着一些核心思想:
SQL当然不会围绕功能作为建模事物的主要工具,但是它确实包含了纯度的想法-在相同的数据库上运行的同一查询每次都会产生相同的结果(除了排序)。通过IMO将SQL称为“功能性”语言有点麻烦。
SQL不是必需的,因为解析HOW查询和关系的过程不是由程序员定义的,而是由编译器/优化器/解释器定义的。SQL是一种声明性语言 -在SQL中,您声明关系。这将使用插入,更新和删除建立一个数据结构(该结构又不是由语言物理定义,而是由其实现)。
然后使用查询(SELECT语句)来完成关系的使用,查询是有效的,因为它们没有副作用。
整个事情都围绕着关系模型。
SQL实际上不是声明性的功能语言。通常,功能语言强调声明式而不是命令式,以最大程度地减少副作用。这可能会导致某些人将SQL称为功能性的,但这并不准确。它具有过程元素的声明性。
我不知道一种语言是否具备功能所需的所有功能,但是Sql Server引入了一种非常有趣的方法来使用功能。特殊子句使函数能够在查询中一起交互。它称为“应用”。当我向一位前APL程序员解释这一点时,他告诉我,APL中存在类似的子句以实现相似的目标。Apply子句允许将表行或表函数行的属性集作为输入传递给另一个函数。话虽这么说,但我对表函数的类型施加了限制,以使其被视为具有功能。必须声明为内联,这意味着表示为单个select语句。这强加了没有变量。可以编写具有很多逻辑的此类查询,前提是您使用公用表表达式,然后允许将表达式转换为列,这是一种不可更改的变量,可以在其他CTE中重用。最终,.function变成了一个非常大的宏,这使优化器可以自由地优化所需的方式。人们唯一缺少的是一些简单的技巧来编写条件逻辑并在查询中声明一些数据支持逻辑。最后,需要一些使用over子句的函数作为将结果作为可从其他行中一行使用的值进行结果的方式,但是在这里要详细说明。人们唯一缺少的是一些简单的技巧来编写条件逻辑,并在查询中声明一些数据支持逻辑。最后,需要一些使用over子句的函数作为将结果作为可从其他行中一行使用的值进行结果的方式,但是在这里要详细说明。人们唯一缺少的是一些简单的技巧来编写条件逻辑,并在查询中声明一些数据支持逻辑。最后,需要一些使用over子句的函数作为将结果作为可从其他行中一行使用的值进行结果的方式,但是在这里要详细说明。