第二阶段 SQL(Structured Query Language)
本阶段目标
学完这一阶段,你应该能够回答:
- SQL 是什么?
- SQL 为什么是标准语言?
- SQL 有哪几种分类?
- DDL、DML、DQL、DCL 分别负责什么?
- 一条 SQL 是如何执行的?(先建立概念)
第一章 什么是 SQL?
SQL 全称:
Structured Query Language
中文:
结构化查询语言
注意:
SQL 不是 MySQL 发明的。
SQL 是一种国际标准语言。
就像:
HTML
CSS
JavaScript
是一种标准一样。
SQL 也是标准。
例如:
你学习 MySQL:
SELECT * FROM user;
到了 PostgreSQL:
SELECT * FROM user;
Oracle:
SELECT * FROM user;
基本还是一样。
这就是:
SQL 是标准。
为什么叫"结构化"?
因为 SQL 必须按照固定的语法来写。
例如:
正确:
SELECT name
FROM user
WHERE age > 18;
错误:
FROM user
SELECT name;
SQL 有固定结构,所以叫:
Structured(结构化)。
第二章 SQL 能干什么?
SQL 可以完成数据库中的几乎所有操作。
例如:
创建数据库:
CREATE DATABASE school;
创建表:
CREATE TABLE student (...);
插入数据:
INSERT INTO student VALUES (...);
查询:
SELECT * FROM student;
修改:
UPDATE student
SET age = 20
WHERE id = 1;
删除:
DELETE FROM student
WHERE id = 1;
授权:
GRANT ...
所以:
SQL 就是数据库的"语言"。
第三章 SQL 的四大分类
这是面试必问。
SQL 可以分成四类:
SQL
│
├── DDL
├── DML
├── DQL
└── DCL
记忆口诀:
建(DDL)→ 改数据(DML)→ 查(DQL)→ 管权限(DCL)
第一类:DDL(Data Definition Language)
中文:
数据定义语言
关键词:
定义数据库结构。
DDL 操作的是:
- 数据库
- 表
- 字段
- 索引(后面学习)
不会操作数据。
例如:
创建数据库:
CREATE DATABASE school;
创建表:
CREATE TABLE student (
id INT,
name VARCHAR(20)
);
修改表:
ALTER TABLE student
ADD age INT;
删除表:
DROP TABLE student;
可以理解成:
装修房子。
例如:
房子:
客厅
卧室
厨房
DDL 做的是:
增加卧室
拆厨房
修改卫生间
它改变的是:
结构。
第二类:DML(Data Manipulation Language)
中文:
数据操作语言
注意:
DDL 改的是:
房子的结构
DML 改的是:
房子里面的人
例如:
student
原来:
| id | name |
|---|---|
| 1 | Tom |
新增:
INSERT INTO student
VALUES (2,'Jack');
修改:
UPDATE student
SET name='Lucy'
WHERE id=2;
删除:
DELETE FROM student
WHERE id=2;
所以:
DML:
操作的是:
数据。
第三类:DQL(Data Query Language)
这是工作中使用最多的。
DQL:
只有一个核心:
SELECT
例如:
查询全部:
SELECT *
FROM student;
查询名字:
SELECT name
FROM student;
条件查询:
SELECT *
FROM student
WHERE age > 18;
以后:
工作 70%~80% 的 SQL:
都是:
SELECT
后面的:
JOIN
GROUP BY
ORDER BY
LIMIT
都是:
SELECT 的扩展。
第四类:DCL(Data Control Language)
中文:
数据控制语言
负责:
权限。
例如:
创建用户:
CREATE USER ...
授权:
GRANT
撤销:
REVOKE
删除用户:
DROP USER
一般:
DBA 用得比较多。
普通开发:
偶尔会用。
四大分类总结
| 分类 | 全称 | 操作对象 | 常见命令 | 举例 |
|---|---|---|---|---|
| DDL | Data Definition Language | 数据库、表、字段 | CREATE、ALTER、DROP、TRUNCATE | 创建数据库、创建表、修改表结构 |
| DML | Data Manipulation Language | 表中的数据 | INSERT、UPDATE、DELETE | 新增、修改、删除记录 |
| DQL | Data Query Language | 数据查询 | SELECT | 查询数据、排序、分页、分组 |
| DCL | Data Control Language | 权限与用户 | GRANT、REVOKE、CREATE USER | 用户授权、权限管理 |
第四章 SQL 的执行过程(建立概念)
现在先不用记住细节,只建立一个整体印象。
当你写:
SELECT * FROM student;
MySQL 大致会经历:
SQL
│
▼
连接 MySQL
│
▼
语法解析
│
▼
检查是否有 student 表
│
▼
生成执行计划
│
▼
读取数据
│
▼
返回结果
以后我们学习:
- 解析器
- 优化器
- 执行器
- InnoDB
就是在讲:
这一条 SQL:
到底经历了什么。
第五章 为什么 SQL 如此重要?
以后:
NestJS:
await userRepository.find()
看起来:
没有 SQL。
实际上:
ORM 会生成:
SELECT *
FROM user;
所以:
ORM 只是帮你写 SQL。
真正执行的:
仍然是:
SQL。
因此:
一个优秀的后端工程师,不仅要会用 ORM,更要能读懂和编写 SQL。
本阶段知识导图
SQL
│
├── SQL 是什么
│
├── SQL 是国际标准
│
├── 四大分类
│ ├── DDL(定义结构)
│ ├── DML(操作数据)
│ ├── DQL(查询数据)
│ └── DCL(权限管理)
│
└── SQL 执行流程(初步认识)
本章思考题
在进入下一节之前,建议你先回答这几个问题:
- SQL 为什么被称为"结构化查询语言"?
SQL 被称为结构化查询语言(Structured Query Language),因为它必须按照固定的语法结构来编写,不能随意调整关键字顺序 - DDL 和 DML 的本质区别是什么?请分别举两个例子。
DDL 修改的是数据库对象(结构),DML 修改的是数据库对象中的数据。 - 为什么
SELECT被单独归类为 DQL,而不是 DML?
因为SELECT只负责查询数据,不会修改数据内容,而 DML 的核心职责是对数据进行新增、修改和删除。为了体现"读"和"写"的区别,数据库将SELECT单独归类为 DQL。 - 如果要删除一张表,应该使用哪一类 SQL?如果只是删除表中的一条数据,又属于哪一类?
删除整张表属于 DDL,因为删除的是数据库对象;删除表中的一条记录属于 DML,因为删除的是数据,而不是表结构。 - 为什么学习了 ORM(如 TypeORM、Prisma)之后,仍然需要学习 SQL?
ORM 的作用是提高开发效率,它会把代码转换成 SQL,但数据库最终执行的仍然是 SQL。当出现性能问题、复杂查询或需要优化索引时,开发者必须理解 SQL,才能分析执行计划、优化查询和解决问题。因此,ORM 不能代替 SQL,它只是 SQL 的高级封装。