什么是结构化查询语言 (SQL)?

监控控制室的台式电脑操作人员特写

作者

Alexandra Jonker

Staff Editor

IBM Think

Tim Mucci

IBM Writer

Gather

什么是结构化查询语言 (SQL)?

结构化查询语言 (SQL) 是操作 MySQL、SQL Server、IBM Db2、PostgreSQL 及 Oracle Database 等关系数据库管理系统 (RDBMS) 的标准化专用领域编程语言。

SQL Query(亦称 SQL 命令或 SQL 语句)使用户能便捷地添加、检索、更新、删除、聚合和以其他方式管理关系数据库关系数据库(或 SQL Database)中的数据。此类系统中,结构化数据被组织为行与列,共同构成数据表。数据通常以多张关联表的结构化形式组织存储,可通过/外键关联确保数据完整性。

与其他编程语言不同,SQL 属声明式语言,即用户只需描述 想要计算机做什么(所需结果) ,而无需指定如何做 (实现步骤) 。 这与需要逐步指令的命令式或过程式语言(如 JavaCOBOL)形成鲜明对比。

例如,当用户编写 SQL Query 以获取数据时,他们无需详细说明为数据库收集数据的步骤,只需描述期望的结果:

SELECT 姓名、电子邮件
FROM 客户表
WHERE 城市 = “纽约”;

SQL 作为现代技术栈的基础工具,以数据操作能力强、查询处理快、安全性高著称。SQL 还具备跨系统兼容性、满足增长数据需求的可扩展性以及强大的开源社区支持。

SQL 发展历程

20 世纪 70 年代,IBM 科学家 Donald Chamberlin 与 Raymond Boyce 开发并推出 SQL。其源于关系模型概念,初版命名为 SEQUEL(结构化英语查询语言),后简化为 SQL。它于 1979 年正式商业化,并从此成为 关系数据库 管理系统的全球标准。

SQL  分别于 1986 年和 1987 年由美国国家标准学会 (ANSI) 和国际标准化组织 (ISO) 进行 标准化 。 尽管已是标准语言,SQL 存在多种衍生语言,例如 Microsoft SQL Server 的 T-SQL 和 Oracle Database 的 PL/SQL。这些 SQL 衍生语言既满足特定系统需求,又兼容 SELECT、UPDATE、DELETE、INSERT 和 WHERE 等核心 ANSI 标准命令。

辅以专家洞察分析的最新科技新闻

通过 Think 时事通讯,了解有关 AI、自动化、数据等方面最重要且最有趣的行业趋势。请参阅 IBM 隐私声明

谢谢!您已订阅。

您的订阅将以英语提供。您会在每份时事通讯中找到一个取消订阅链接。您可以在此管理您的订阅或取消订阅。更多相关信息,请参阅我们的《IBM 隐私声明》。

SQL 为何很重要?

自 20 世纪 70 年代开发以来,SQL 已成为现代数据库系统的支柱。

与通用编程语言不同,SQL 专为关系数据库构建——而关系数据库与 SQL 语言存在相互优化的设计关系。这种相互优化的设计使 SQL 成为高效的数据管理工具。

SQL 的声明式特性使其对编程经验有限的用户同样易用,堪称初学者理想语言。其广泛应用及与 Python、Java 等语言的集成,更使其成为编程与数据领域的重要技能。

数据分析师、数据科学家和数据库管理员常使用 SQL,因其擅长数据处理、数据定义、访问控制、数据共享数据集成大数据分析等任务。

数据科学中, SQL 用于创建存储大型分析数据集的数据库。其从海量结构化数据集中操作与检索数据的能力,对依赖高质量训练数据的人工智能 (AI) 和机器学习 (ML) 应用程序开发至关重要。

SQL 遵循 ACID 特性——原子性、一致性、隔离性、持久性——确保在关键业务场景和敏感数据处理场景下的可靠事务处理。同时支持更精准的数据驱动决策高级分析和增强型商业智能

AI Academy

数据管理是生成式 AI 的秘诀吗?

深入了解为什么高质量数据对于成功使用生成式 AI 至关重要。

SQL 有哪些优势?

SQL 具备多重优势,故能成为应用最广泛且长盛不衰的编程语言之一。

便捷的数据操作

SQL 的简洁命令(如 GROUP BY、ORDER BY、GRANT、REVOKE)使各级用户得以操作数据库。

快速查询处理

SQL 索引与查询优化技术提升了数据检索速度,从而增强了数据库性能。

强大的数据安全

SQL Database 集成了安全功能(例如用户认证、访问控制及加密)以保护数据。

通用性和兼容性

SQL 遵循 ANSI 与 ISO SQL 标准,确保跨系统与平台的兼容性(包括云环境及大数据工具)。

可扩展性

SQL 能够高效管理小型和大型数据库,适应不断增长的数据需求,且不会出现显著的性能下降。

开源支持

许多 SQL Database 属开源项目,得到活跃大型社区的支持,持续推动技术改进与问题解决。

SQL Query 如何运作?

关系数据库以表格形式(行与列)组织数据 ,并管理 多表间关联。例如,客户服务数据库可能会使用单独的表格分别存储客户信息、购买、产品代码和联系方式,并通过唯一客户 ID 等键进行关联。

SQL 允许用户编写查询(及子查询)操作数据。这些命令在 SQL 处理过程中会经过以下几个软件组件:

解析器验证 SQL 语句的语法正确性,并将其转换为数据库可识别的内部格式(例如词法标记)。此步骤含语法分析与语义检查。解析器还将帮助确保用户有权执行该操作。

然后,关系引擎(亦称查询优化器)规划最高效的数据检索、修改或添加策略。它通过评估不同查询执行计划实现。最终将计划写入字节码(一种虚拟机语言)。此步骤对于优化数据库性能和资源使用至关重要。

最后,存储引擎处理字节码,执行 SQL 语句并管理物理数据存储。其处理数据物理表示形式(含文件格式与数据缓冲)。同时将结果返回用户或应用程序。此步骤有助于确保对磁盘上数据的高效访问与更新。这种关联通常涉及使用主键和外键建立的关系(例如一对多或多对多),以确保数据的完整性。

SQL 系统的关键组件

关系数据库管理系统(亦称 SQL 系统)包含以下组件:

  • 数据库:存储、管理及保护结构化数据集的数字存储库。

  • 数据库表:数据以行和列的形式组织;每行或每列包含关于一种实体的信息。

  • SQL Query:SQL Query 是用 SQL 编写的指令,用于操作关系数据库中的数据。

  • SQL 约束:控制数据库列或表中数据的规则,以维护数据完整性的规则。

  • 存储过程:可重复使用的预存 SQL 命令集。

  • 事务:捆绑为单个工作或操作单元的一个或多个 SQL 命令。

  • 数据类型:定义列可存储数据类型的规则。

  • 索引:一种数据库对象,通过减少查询所需的磁盘访问 次数来加快数据检索。

  • 视图:基于 SQL Query 的虚拟表,可简化复杂查询并通过限制底层数据访问提升安全性。

  • 安全与权限:管理用户访问的功能,其备份和恢复机制可防止数据丢失或损坏。

SQL 命令类型:DDL、DML、DQL、DCL 和 TCL

SQL 命令传统上分为以下类别:

  • 数据定义语言 (DDL)
  • 数据操作语言 (DML)
  • 数据控制语言 (DCL)
  • 数据查询语言 (DQL)
  • 事务控制语言 (TCL)

数据定义语言 (DDL)

数据定义语言管理表、视图及索引等数据库对象 。它定义了存储数据的结构、组织方式及数据项间关系。 

数据操作语言 (DML)

数据操作语言通过 INSERT、UPDATE 及 OUTER JOIN 等操作管理数据库数据——实现数据添加、修改与合并。

数据控制语言 (DCL)

数据控制语言通过 GRANT(授权)和REVOKE(撤权)等命令控制数据访问。它可以限制用户的检索、添加及修改能力。

数据查询语言 (DQL)

数据查询语言执行数据检索操作,通常使用 SELECT 命令。它可以获取特定数据项或数据范围。

事务控制语言 (TCL)

事务控制语言管理事务操作变更,保障数据完整性,支持 ROLLBACK(回滚)与 COMMIT(提交)操作——分别用于撤销或保存变更。它用于协调 并发用户间的数据共享。

常见的 SQL 命令有哪些?

SQL Database 支持多种 SQL 数据操作语句。但 SQL 命令可能因数据库自有 SQL 语法而异。

基础 SQL 命令包括:

SELECT

从一个或多个表检索数据。

SELECT name, email

FROM 客户表

WHERE 城市 = “纽约”;
此语句从客户表中检索居住在纽约的所有客户的姓名和电子邮件。

INSERT

向表添加新行。

INSERT INTO customers (name, email, city)
VALUES ('Jane Doe', 'jane.doe@example.com', 'Los Angeles') ;

该语句在 客户 表中添加一行,包含姓名为“Jane Doe”, 电子邮件为“jane.doe@example.com”且城市为“洛杉矶”。

UPDATE

修改表中现有数据。

UPDATE customers 
SET email = 'new.email@example.com' 
WHERE name = 'John Doe' ;

此语句将客户表中 姓名为 “John Doe”的客户的电子邮件更新为 “new.email@example.com”。

DELETE

根据条件从表中删除行。

DELETE FROM customers 
WHERE city = 'Boston' ;

此语句从 客户 表中删除 城市 为“波士顿”的所有行。

CREATE TABLE

定义新表及其结构。

CREATE TABLE products (
product_id INT PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10, 2)
) ;

此语句将创建一个名为产品的新表,其中包含三列:整数主键 product_id、最多 100 个字符的可变字符串 name 以及保留十位数和两位小数的价格 price。

ALTER TABLE

修改现有表结构。

ALTER TABLE customers 
ADD COLUMN birthday DATE ;

此语句现有客户表中添加了类型为 DATE 的新列 birthday。

DROP TABLE

删除表及其全部数据。

DROP TABLE old_customers ;

此语句将删除 old_customers 表及其所有数据。

JOIN

根据相关列合并两个或多个表中的行。

SELECT c.name, p.name AS product_name
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
JOIN products p ON o.product_id = p.product_id
WHERE c.city = 'New York' ;

SQL JOIN 语句检索 客户的姓名 及其所订购产品的名称。该语句通过 customer_id 和 product_id  关联客户表、订单表及产品表 ,仅 筛选出 纽约的客户。

SQL 数据库与 NoSQL 数据库

SQL Database 属关系数据库,结构化数据存储于互相关联的行列表中。SQL 是与这类数据库交互的标准语言。

NoSQL 数据库(非关系数据库)兴起于 2000 年代末,用于处理弱结构化数据。此类数据库(如 MongoDB) 相比  SQL Database 提供更灵活的数据模型。

SQL 和 NoSQL 主要区别包括:

  • 可扩展性
  • 结构
  • 绩效
  • 用例
  • 知识与社区
  • 运维管理

可扩展性

NoSQL数据库支持横向扩展——通过增加服务器应对高流量。而 SQL 数据库传统上采用垂直扩展——需升级硬件应对负载增长。

结构

SQL Database 采用基于表的结构,基于其强大的索引和连接性能,非常适合处理多行事务和相关数据的复杂查询。 NoSQL 提供多种结构,如键值、文档、图形或 宽 列存储,以满足不同需求,并为半结构化或非结构化数据提供了更大的灵活性。

性能

SQL Database 遵循 ACID 原则,针对复杂查询 优化 并保障严格数据一致性。NoSQL 数据库遵循基本原则(基本可用、软状态、最终一致性),在特定 数据类型 上性能更快,但一致性保障机制不同。

用例

SQL  Database 适用于 需复杂事务、强一致性及严格 模式 遵从的场景(如金融系统、电商平台、CRM 数据库)。NoSQL  更适合 处理快速变化、大规模数据或半结构化数据的场景,例如社交网络、实时分析或内容管理系统。

知识与社区

SQL Database 因历史悠久且广泛应用,拥有更广泛的资源(如 SQL 教程与社区支持)。NoSQL 初始设计需求较低且易扩展,但复杂查询与数据一致性常需额外定制开发。

运维管理

SQL Database 需谨慎设计模式,且模式变更的维护成本较高。NoSQL 数据库管理系统则提供 更便捷 的扩展能力与模式适应性,无需大规模停机或重构。

什么是 SQL 注入?

尽管许多 SQL Database 具备安全优势,但企业应用程序仍可能因弱认证机制、不安全设计及配置失当等漏洞面临风险。此类漏洞使 SQL 注入持续成为企业的现实威胁。

当攻击者篡改 SQL Query 以访问或破坏数据库信息时,即发生 SQL 注入攻击。了解这些漏洞并实施强有力的安全措施,对于保护 SQL 数据至关重要。

相关解决方案
数据管理软件和解决方案

设计数据战略,消除数据孤岛、降低复杂性并提高数据质量,以获得卓越的客户和员工体验。

深入了解数据管理解决方案
IBM watsonx.data™

watsonx.data 支持您通过开放、混合和已治理数据,利用您的所有数据(无论位于何处)来扩展分析和 AI。

了解 watsonx.data
数据和分析咨询服务

通过 IBM® Consulting 发掘企业数据的价值,建立以洞察分析为导向的组织,实现业务优势。

了解分析服务
采取下一步行动

设计数据战略,消除数据孤岛、降低复杂性并提高数据质量,以获得卓越的客户和员工体验。

深入了解数据管理解决方案 了解 watsonx.data