本节摘要:数据库是按结构组织的数据集合,数据库管理系统(DBMS)是管理它的软件,SQL 是操作 DBMS 的标准语言。本节把这三个常被混用的概念分清楚。
阅读完本节,你应当能够:
这三个词常被混着用,其实层次不同。
数据库(Database) 是按一定结构组织起来的数据集合。它本身是个概念,落地需要一个软件来管理——这个软件就是 数据库管理系统(DBMS),比如 MySQL、PostgreSQL、Oracle、SQL Server。我们日常说"把数据存进数据库",严格说是存进某个 DBMS 管理的数据库里。
表(Table) 是数据库里存数据的基本单位,由行和列组成。一个数据库通常有多张表,表之间通过键关联。比如一个电商数据库可能有 Customers(客户)、Orders(订单)、Products(商品)几张表。

SQL(Structured Query Language,结构化查询语言)是操作关系型数据库的标准语言。你写一句 SQL,交给 DBMS,DBMS 解析后读写表里的数据返回结果。
SQL 不是一个软件,是一种语言标准。虽然各 DBMS 都支持 SQL,但各有方言差异——比如分页 MySQL 用 LIMIT、SQL Server 用 TOP、Oracle 用 ROWNUM。核心语法大同小异,细节要查对应 DBMS 的文档。
SQL 按功能分几大子语言:
| 子语言 | 全称 | 作用 | 典型语句 |
|---|---|---|---|
| DQL | 数据查询语言 | 查数据 | SELECT |
| DML | 数据操作语言 | 增删改数据 | INSERT/UPDATE/DELETE |
| DDL | 数据定义语言 | 定义结构 | CREATE/ALTER/DROP |
| DCL | 数据控制语言 | 权限控制 | GRANT/REVOKE |
| TCL | 事务控制语言 | 管理事务 | COMMIT/ROLLBACK |
本教程覆盖 DQL、DML、DDL,DCL/TCL 在第 7 章简要涉及。
SQL 是声明式语言,这是它和普通编程语言最大的区别。普通编程语言是命令式的——你告诉计算机"怎么做",一步步操作。SQL 是声明式的——你告诉数据库"我要什么",由 DBMS 决定怎么取。
比如"找出北京的所有客户",你不写"遍历每一行判断城市",而是写:
SELECT * FROM Customers WHERE City = '北京';
怎么遍历、怎么判断、用不用索引,都是 DBMS 的事。你只描述目标。这种"描述结果而非过程"的写法,让 SQL 适合数据查询,但也让初学者一开始不适应——习惯了写循环的人,要转变成"描述集合"的思路。
💡 关键直觉:写 SQL 时别想着"怎么一步步取数据",要想"我要的结果集长什么样"。把脑子从"过程"切换到"集合",SQL 就顺了。
⚠️ 常见坑:把 SQL 当普通编程语言,写一堆子查询嵌套模拟循环,结果又慢又难懂。SQL 的强项是集合操作,多用 JOIN、GROUP BY、集合运算,少用层层嵌套子查询。
下一节讲为什么要学 SQL,以及它和别的技术的分工。
Q1:数据库和 DBMS 到底怎么区分?
数据库是"数据集合"这个抽象概念,DBMS 是管理数据的软件。可以把"数据库"理解成仓库里的货物,DBMS 是仓库管理系统。平时说"把数据存进数据库",严格说是存进某个 DBMS 管理的数据库实例里。这个概念分不清,看文档时会被"一个实例里有多个数据库"这种说法绕晕。
Q2:SQL 有几种"方言"?
主要分两大系:MySQL/PostgreSQL/SQLite 一套较接近 ANSI 标准,SQL Server/Oracle 各有特色。典型差异:分页(LIMIT vs TOP vs ROWNUM)、字符串拼接(CONCAT vs || vs +)、自增列(AUTO_INCREMENT vs IDENTITY vs SEQUENCE)。学会标准 SQL 后,换数据库时主要查这些差异点即可。
Q3:为什么说 SQL 是声明式的?对初学者意味着什么?
声明式意味着你描述"要什么",数据库决定"怎么做"。写 Python 循环你得考虑每一步怎么走,写 SQL 只需说"给我北京的客户"。这对初学者是好事——不用管底层算法;也是挑战——思维要从"过程"转向"集合"。遇到不适应的时刻,想想这句:SQL 里你是在描述结果集,不是在写步骤。
学习本章最好的验证方式,是亲手把三个概念落到一个真实的数据库上。如果你已经装好数据库,可以这样操作:
第一步,建立一个测试库。不同的数据库软件,建库写法略有差异,但核心思路一样:告诉系统"我要创建一个叫练习库的数据库"。创建成功后,数据库管理系统会替你维护这个库的所有元信息。
第二步,在库里建一张最简单的表,字段不用多,两三列就够。这一步能让你亲眼看到"数据库、表、数据"三者是怎么一层层装起来的:库里装表,表里装行,行里是具体的数据。
第三步,用一条查询把表里的数据读出来。此时你会真切感受到前面说的"声明式"——你只说了"我要这些数据",至于数据库管理系统怎么找、怎么返回,全是它自己干的。
这三步做完,你会发现:数据库的概念从"抽象的术语"变成了"手边真实存在的东西"。这一步的体验价值,远高于把定义背三遍。如果暂时装不了数据库,也可以先在纸上画一画"库里有表、表里有行"的结构图,同样有帮助。
数据库是装数据的仓库,数据库管理系统是管仓库的软件,表是仓库里的货架,SQL 是货架管理员使用的指令语言。四者的关系理顺了,本章就掌握了大半。