如果您在数据密集型行业工作,一定听说过数据库。访问数据库中存储数据的常见方式就是通过 SQL。本文将带您深入了解 SQL。但我们不会立刻跳进 SQL 的语法和术语,而是先回顾计算机科学中的一些关键概念,帮助我们回答这个问题:SQL 是一门编程语言吗?
什么是 SQL?
先来定义一下什么是数据库。简单来说,数据库是用于存放结构化数据的存储系统。此外,数据库管理系统(DBMS)充当数据库与其终端用户或程序之间的接口。您可以在 DataCamp 的 Database Design 课程中进一步了解这种关系。
最常见的 DBMS 类型是关系型数据库管理系统(RDBMS),我们在其中存储结构化数据,即包含实体与变量之间关系的数据。这些实体和变量被组织为由列和行构成的一组表。
RDBMS 中的数据存放在称为表的数据库对象中。一个数据库通常包含多张表。每张表都有一个唯一名称,并包含以行和列组织的相关数据集合。表中的列称为字段,用于存放表某个特定属性的值。表中的每一行称为一条记录。
SQL 读作 “S-Q-L” 或 “sequel”,全称为 Structured Query Language(结构化查询语言)。SQL 用于编程,旨在通过SQL 查询来管理存储在 RDBMS 中的数据。
所谓查询,本质上是由多种 SQL 命令组成的语句,用于执行特定任务,以访问、管理、修改、更新、控制和组织您的数据。这个对查询的定义听起来和“计算机程序”非常接近;这是否意味着 SQL 是一门编程语言?
下一节我们来更清楚地理解编程语言的含义。
什么是编程语言?
编程语言由一组预定义的词汇和语法规则组成。通过这种语言,可以指示计算机或计算设备执行特定任务。
编程语言种类繁多,各有其独特特性和用途。不过,总体而言,它们可分为两大类:低级和高级编程语言。
更接近机器码或二进制(1 和 0)的编程语言被称为低级语言。
低级语言通常不易于人类阅读,因为其结构旨在像机器思考那样编写指令。但与纯粹的 1 和 0 相比,它们还是更容易理解。
那么为什么要使用低级语言?因为它们很快!并且能让程序员更精确地控制计算机硬件的运行方式。
另一方面,高级语言更接近人类的沟通方式。它们在指令中使用的词汇更接近日常语言,使编程和维护更为容易。缺点是为了让计算机理解,需要花更多时间将其翻译为机器码。
但随着计算机性能的提升,低级与高级语言之间的性能差异往往只有毫秒级。这也是为什么大多数编程岗位更倾向于寻找具备高级编程语言技能的人才。
什么是图灵完备性?
为了衡量一门编程语言的能力,计算机科学家经常使用图灵完备性这一概念。它以计算机科学家艾伦·图灵命名。1936 年,他提出了图灵机,这成为关于计算与计算机理论的基础。
图灵机是一种装置,它以模拟遵循逻辑指令的人类行为的方式,在纸带上打印符号。
编程语言是访问和修改数据的形式化规则系统。如果这些规则能够模拟图灵提出的假想计算机器,那么这些规则就被称为“图灵完备”。图灵完备的系统在数学上可以被证明可以执行任何可能的计算。
我们强烈推荐观看 Computerphile 的这段视频,以进一步了解图灵机以及其后续关于图灵完备性的系列视频。
通用编程语言 vs. 领域特定语言
SQL 有一组预定义的关键字并遵循严格的语法。要开始用 SQL 编程,可以查看 DataCamp 的 Introduction to SQL 课程,我们将从选择与筛选记录和字段入手,随后学习聚合函数、排序与分组。
鉴于编程语言具有特定词汇和特定语法这一定义,SQL 当然算是一门编程语言。不过,它并不属于通用语言(GPL),而是一种领域特定语言(DSL)。
领域特定语言是专为解决某一特定领域问题而创建的计算机语言,并不旨在解决该领域之外的问题。
这类语言在设计与实现时有着特定目标。例如,SQL 专为与数据库协同工作而构建,用于查询数据库以及处理其中存储的数据。您无法仅用 SQL 构建一个完整的应用程序。
另一个 DSL 的例子是层叠样式表(CSS),它广泛用于为网站的 HTML 添加样式。
DSL 与通用编程语言(GPL)相对,后者可广泛应用于各个领域。它们旨在让您编写任何所需逻辑的各类程序。
使用 GPL,您可以创建各种应用程序,包括桌面、移动或 Web 应用。一些最广泛使用的 GPL 包括 Python、C++、Ruby、Java 和 JavaScript。
总体而言,DSL 的能力不如 GPL。然而,这也带来了某些好处。由于应用领域较窄,SQL 相对比多数通用编程语言更容易学习。
我们建议您学习 DataCamp 的 SQL Fundamentals 学习路径,在 21 小时内通过 5 门课程,从入门到精通 SQL。
那么,SQL 是一门编程语言吗?
正如我们之前讨论的,图灵完备性是衡量一门编程语言能力的指标。语言越强大,能够执行的计算就越复杂。随着 SQL 中引入公共表表达式(CTE)和窗口函数,我们能够在 SQL 中执行递归与层级计算,使之更为强大,并具备图灵完备性。
不过,SQL 标准花了很长时间才加入层级与递归查询功能。因此,一些较早、较传统的 RDBMS 可能不具备图灵完备性。
我们此前讨论过通用编程语言与领域特定编程语言的区别。人们提到“编程语言”时,往往指的是“通用编程语言”,这有时会引发混淆。
因此,从编程语言的严格定义来看,SQL 是一种领域特定且图灵完备的编程语言。这也就将 SQL 归入编程语言之列。
对于已掌握 SQL 基础、希望更进一步并开始学习窗口函数的读者,欢迎查看 DataCamp 的交互式课程 PostgreSQl Summary Stats and Window Functions。您将学习如何使用窗口函数这一 SQL“秘密武器”来编写用于分析和数据工程的查询!
SQL 的不同类型
您可能听说过 SQL 的不同类型或方言:T-SQL、PostgreSQL、MySQL 等。但这些 SQL 的不同类型是什么?为什么会存在?我们来简单回顾一下 SQL 的历史。
IBM 的英国计算机科学家 Edgar Frank Codd 于 1970 年发表了论文“A Relational Model of Data for Large Shared Data Banks”。在这篇论文中,他发明了用于数据库管理的关系模型,自此成为关系型数据库和关系型数据库管理系统的理论基础。
随后,在 20 世纪 80 年代后期,人们开始推动建立 SQL 的官方标准。
SQL 于 1986 年成为美国国家标准协会(ANSI)的标准,并于 1987 年成为国际标准化组织(ISO)的标准。自 20 世纪 80 年代以来,SQL 标准多次修订,尽管标准 SQL 的核心功能自 1992 年起基本稳定。
然而,不同公司的数据库实现者需要解决新问题或绕过 SQL 标准未解决的既有问题,新的变体不断出现。这也解释了为什么多种 SQL 方言陆续出现并一直并存至今。
如今只有一种 SQL 语言,但不同的数据库管理系统在原有 SQL 标准之上进行了扩展,以添加自身功能或调整语法以适配其工作方式。由此,诞生了多种 SQL 方言。
您可以在我们的博文“SQL Server、PostgreSQL、MySQL……有什么区别?我该从哪里开始?”中详细了解这些不同方言。
该从哪种 SQL 方言开始?
我们建议您从 PostgreSQL 入手。
PostgreSQL 是一款功能强大的开源对象关系型数据库系统,它使用并扩展了 SQL 语言。它还具备多种特性,可安全存储并扩展最复杂的数据工作负载。
它与标准 SQL 的贴合度最高,也是使用最广的 SQL 方言之一。从 PostgreSQL 起步,能为您后续适配其他 SQL 方言、将技能迁移到其他 RDBMS 提供最灵活的工具。
DataCamp 的 Functions for Manipulating Data in PostgreSQL 课程是一门优秀的中级交互式课程,能帮助您朝着正确方向迈进。
SQL 与过程式语言
我们已经知道,SQL 不是一门通用编程语言。不过,您可以将 SQL 与过程式语言结合,以模拟某些类似 GPL 的行为。这样做从技术上使 SQL 有可能在其既定领域之外使用。
过程式语言是一类编程语言,特别强调使用函数、条件语句和变量来编写能被计算机识别的程序,以实现特定的计算输出。
所有数据库管理系统(DBMS)都支持一种或多种过程式语言方言。示例如下:
Procedural Language for SQL(PL/SQL)
这是由 Oracle 公司为 SQL 创建的扩展。与通用编程语言类似,PL/SQL 允许使用条件与循环。通过 PL/SQL,您还可以声明常量、变量、变量类型、触发器、过程和函数。
Procedural Language/PostgreSQL(PL/pgSQL)
这是一种由开源的 PostgreSQL 面向对象关系型数据库管理系统支持的过程式语言。它与上文所述的 Oracle PL/SQL 非常相似,包含循环与条件等元素。它允许用户自定义函数,并支持运算符的继承。
Transact-SQL(T-SQL)
这是 Sybase 和 Microsoft 的编程扩展,允许声明局部变量。它还对 SQL 标准中的传统 DELETE 与 UPDATE 语句进行了更改。它包括事务控制、异常与错误处理。T-SQL 用于常见的数据库 Microsoft SQL Server。
通过这些扩展,SQL 能以类似 GPL 的方式执行任务,使其成为更强大、更重要的一项必学技能!
开始学习 SQL
希望通过以上内容,您不但认识到 SQL 是一门编程语言,更了解到它是一门强大的编程语言,能帮助您最大化发挥数据价值!
Datacamp 是在线学习数据科学与数据分析的优秀平台。我们提供大量高质量在线课程,帮助您理解 SQL 及其细微差别。
我们的 Introduction to SQL Server 是其中一门交互式课程,您将有机会通过实践检验所学、建立信心。您将使用数字媒体数据库回顾各位艺术家与曲目的销售情况、探索 Eurovision 数据集,并回顾美国停电趋势,以便在多种数据类型与情境下进行练习。
学习愉快!
如果您在数据密集型行业工作,一定听说过数据库。访问数据库中存储数据的常见方式就是通过 SQL。本文将带您深入了解 SQL。但我们不会立刻跳进 SQL 的语法和术语,而是先回顾计算机科学中的一些关键概念,帮助我们回答这个问题:SQL 是一门编程语言吗?
什么是 SQL?
先来定义一下什么是数据库。简单来说,数据库是用于存放结构化数据的存储系统。此外,数据库管理系统(DBMS)充当数据库与其终端用户或程序之间的接口。您可以在 DataCamp 的 Database Design 课程中进一步了解这种关系。
最常见的 DBMS 类型是关系型数据库管理系统(RDBMS),我们在其中存储结构化数据,即包含实体与变量之间关系的数据。这些实体和变量被组织为由列和行构成的一组表。
RDBMS 中的数据存放在称为表的数据库对象中。一个数据库通常包含多张表。每张表都有一个唯一名称,并包含以行和列组织的相关数据集合。表中的列称为字段,用于存放表某个特定属性的值。表中的每一行称为一条记录。
SQL 读作 “S-Q-L” 或 “sequel”,全称为 Structured Query Language(结构化查询语言)。SQL 用于编程,旨在通过SQL 查询来管理存储在 RDBMS 中的数据。
所谓查询,本质上是由多种 SQL 命令组成的语句,用于执行特定任务,以访问、管理、修改、更新、控制和组织您的数据。这个对查询的定义听起来和“计算机程序”非常接近;这是否意味着 SQL 是一门编程语言?
下一节我们来更清楚地理解编程语言的含义。
什么是编程语言?
编程语言由一组预定义的词汇和语法规则组成。通过这种语言,可以指示计算机或计算设备执行特定任务。
编程语言种类繁多,各有其独特特性和用途。不过,总体而言,它们可分为两大类:低级和高级编程语言。
更接近机器码或二进制(1 和 0)的编程语言被称为低级语言。
低级语言通常不易于人类阅读,因为其结构旨在像机器思考那样编写指令。但与纯粹的 1 和 0 相比,它们还是更容易理解。
那么为什么要使用低级语言?因为它们很快!并且能让程序员更精确地控制计算机硬件的运行方式。
另一方面,高级语言更接近人类的沟通方式。它们在指令中使用的词汇更接近日常语言,使编程和维护更为容易。缺点是为了让计算机理解,需要花更多时间将其翻译为机器码。
但随着计算机性能的提升,低级与高级语言之间的性能差异往往只有毫秒级。这也是为什么大多数编程岗位更倾向于寻找具备高级编程语言技能的人才。
什么是图灵完备性?
为了衡量一门编程语言的能力,计算机科学家经常使用图灵完备性这一概念。它以计算机科学家艾伦·图灵命名。1936 年,他提出了图灵机,这成为关于计算与计算机理论的基础。
图灵机是一种装置,它以模拟遵循逻辑指令的人类行为的方式,在纸带上打印符号。
编程语言是访问和修改数据的形式化规则系统。如果这些规则能够模拟图灵提出的假想计算机器,那么这些规则就被称为“图灵完备”。图灵完备的系统在数学上可以被证明可以执行任何可能的计算。
我们强烈推荐观看 Computerphile 的这段视频,以进一步了解图灵机以及其后续关于图灵完备性的系列视频。
通用编程语言 vs. 领域特定语言
SQL 有一组预定义的关键字并遵循严格的语法。要开始用 SQL 编程,可以查看 DataCamp 的 Introduction to SQL 课程,我们将从选择与筛选记录和字段入手,随后学习聚合函数、排序与分组。
鉴于编程语言具有特定词汇和特定语法这一定义,SQL 当然算是一门编程语言。不过,它并不属于通用语言(GPL),而是一种领域特定语言(DSL)。
领域特定语言是专为解决某一特定领域问题而创建的计算机语言,并不旨在解决该领域之外的问题。
这类语言在设计与实现时有着特定目标。例如,SQL 专为与数据库协同工作而构建,用于查询数据库以及处理其中存储的数据。您无法仅用 SQL 构建一个完整的应用程序。
另一个 DSL 的例子是层叠样式表(CSS),它广泛用于为网站的 HTML 添加样式。
DSL 与通用编程语言(GPL)相对,后者可广泛应用于各个领域。它们旨在让您编写任何所需逻辑的各类程序。
使用 GPL,您可以创建各种应用程序,包括桌面、移动或 Web 应用。一些最广泛使用的 GPL 包括 Python、C++、Ruby、Java 和 JavaScript。
总体而言,DSL 的能力不如 GPL。然而,这也带来了某些好处。由于应用领域较窄,SQL 相对比多数通用编程语言更容易学习。
我们建议您学习 DataCamp 的 SQL Fundamentals 学习路径,在 21 小时内通过 5 门课程,从入门到精通 SQL。
那么,SQL 是一门编程语言吗?
正如我们之前讨论的,图灵完备性是衡量一门编程语言能力的指标。语言越强大,能够执行的计算就越复杂。随着 SQL 中引入公共表表达式(CTE)和窗口函数,我们能够在 SQL 中执行递归与层级计算,使之更为强大,并具备图灵完备性。
不过,SQL 标准花了很长时间才加入层级与递归查询功能。因此,一些较早、较传统的 RDBMS 可能不具备图灵完备性。
我们此前讨论过通用编程语言与领域特定编程语言的区别。人们提到“编程语言”时,往往指的是“通用编程语言”,这有时会引发混淆。
因此,从编程语言的严格定义来看,SQL 是一种领域特定且图灵完备的编程语言。这也就将 SQL 归入编程语言之列。
对于已掌握 SQL 基础、希望更进一步并开始学习窗口函数的读者,欢迎查看 DataCamp 的交互式课程 PostgreSQl Summary Stats and Window Functions。您将学习如何使用窗口函数这一 SQL“秘密武器”来编写用于分析和数据工程的查询!
SQL 的不同类型
您可能听说过 SQL 的不同类型或方言:T-SQL、PostgreSQL、MySQL 等。但这些 SQL 的不同类型是什么?为什么会存在?我们来简单回顾一下 SQL 的历史。
IBM 的英国计算机科学家 Edgar Frank Codd 于 1970 年发表了论文“A Relational Model of Data for Large Shared Data Banks”。在这篇论文中,他发明了用于数据库管理的关系模型,自此成为关系型数据库和关系型数据库管理系统的理论基础。
随后,在 20 世纪 80 年代后期,人们开始推动建立 SQL 的官方标准。
SQL 于 1986 年成为美国国家标准协会(ANSI)的标准,并于 1987 年成为国际标准化组织(ISO)的标准。自 20 世纪 80 年代以来,SQL 标准多次修订,尽管标准 SQL 的核心功能自 1992 年起基本稳定。
然而,不同公司的数据库实现者需要解决新问题或绕过 SQL 标准未解决的既有问题,新的变体不断出现。这也解释了为什么多种 SQL 方言陆续出现并一直并存至今。
如今只有一种 SQL 语言,但不同的数据库管理系统在原有 SQL 标准之上进行了扩展,以添加自身功能或调整语法以适配其工作方式。由此,诞生了多种 SQL 方言。
您可以在我们的博文“SQL Server、PostgreSQL、MySQL……有什么区别?我该从哪里开始?”中详细了解这些不同方言。
该从哪种 SQL 方言开始?
我们建议您从 PostgreSQL 入手。
PostgreSQL 是一款功能强大的开源对象关系型数据库系统,它使用并扩展了 SQL 语言。它还具备多种特性,可安全存储并扩展最复杂的数据工作负载。
它与标准 SQL 的贴合度最高,也是使用最广的 SQL 方言之一。从 PostgreSQL 起步,能为您后续适配其他 SQL 方言、将技能迁移到其他 RDBMS 提供最灵活的工具。
DataCamp 的 Functions for Manipulating Data in PostgreSQL 课程是一门优秀的中级交互式课程,能帮助您朝着正确方向迈进。
SQL 与过程式语言
我们已经知道,SQL 不是一门通用编程语言。不过,您可以将 SQL 与过程式语言结合,以模拟某些类似 GPL 的行为。这样做从技术上使 SQL 有可能在其既定领域之外使用。
过程式语言是一类编程语言,特别强调使用函数、条件语句和变量来编写能被计算机识别的程序,以实现特定的计算输出。
所有数据库管理系统(DBMS)都支持一种或多种过程式语言方言。示例如下:
Procedural Language for SQL(PL/SQL)
这是由 Oracle 公司为 SQL 创建的扩展。与通用编程语言类似,PL/SQL 允许使用条件与循环。通过 PL/SQL,您还可以声明常量、变量、变量类型、触发器、过程和函数。
Procedural Language/PostgreSQL(PL/pgSQL)
这是一种由开源的 PostgreSQL 面向对象关系型数据库管理系统支持的过程式语言。它与上文所述的 Oracle PL/SQL 非常相似,包含循环与条件等元素。它允许用户自定义函数,并支持运算符的继承。
Transact-SQL(T-SQL)
这是 Sybase 和 Microsoft 的编程扩展,允许声明局部变量。它还对 SQL 标准中的传统 DELETE 与 UPDATE 语句进行了更改。它包括事务控制、异常与错误处理。T-SQL 用于常见的数据库 Microsoft SQL Server。
通过这些扩展,SQL 能以类似 GPL 的方式执行任务,使其成为更强大、更重要的一项必学技能!
开始学习 SQL
希望通过以上内容,您不但认识到 SQL 是一门编程语言,更了解到它是一门强大的编程语言,能帮助您最大化发挥数据价值!
Datacamp 是在线学习数据科学与数据分析的优秀平台。我们提供大量高质量在线课程,帮助您理解 SQL 及其细微差别。
我们的 Introduction to SQL Server 是其中一门交互式课程,您将有机会通过实践检验所学、建立信心。您将使用数字媒体数据库回顾各位艺术家与曲目的销售情况、探索 Eurovision 数据集,并回顾美国停电趋势,以便在多种数据类型与情境下进行练习。
学习愉快!