下面是一份系统、清晰、适合从零到进阶学习的 《SQL 指南》。
你可以将它作为入门、复习或做笔记的参考。
🗄️ SQL 指南(Structured Query Language Guide)
1. SQL 是什么?
SQL(结构化查询语言) 用来和数据库交互,用于:
- 查询数据
- 插入数据
- 更新数据
- 删除数据
- 创建数据库和表
- 设置权限、安全策略
适用于关系型数据库:
- MySQL
- PostgreSQL
- MariaDB
- SQL Server
- Oracle
- SQLite
2. SQL 语句分类(超重要)
| 类别 | 作用 | 示例 |
|---|---|---|
| DDL(数据定义) | 创建/修改结构 | CREATE / ALTER / DROP |
| DML(数据操作) | 增删改查 | SELECT / INSERT / UPDATE / DELETE |
| DCL(权限控制) | 授权 | GRANT / REVOKE |
| TCL(事务控制) | 管理事务 | COMMIT / ROLLBACK |
3. DDL:创建数据库 & 表
创建数据库
CREATE DATABASE shop;
使用数据库
USE shop;
创建表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
修改表
ALTER TABLE users ADD phone VARCHAR(20);
ALTER TABLE users DROP COLUMN age;
ALTER TABLE users MODIFY name VARCHAR(100);
删除表
DROP TABLE users;
4. DML:增删改查(CRUD)
4.1 INSERT(添加数据)
INSERT INTO users (name, age, email)
VALUES ("Tom", 20, "tom@example.com");
插入多条:
INSERT INTO users (name, age) VALUES
("Alice", 21),
("Bob", 25);
4.2 SELECT(查询数据)★最重要部分
基本查询
SELECT name, age FROM users;
查询全部:
SELECT * FROM users;
WHERE 条件
SELECT * FROM users WHERE age > 18;
常用运算:
= != > < >= <=
AND OR NOT
IN
BETWEEN
LIKE
LIKE 模糊查询:
SELECT * FROM users WHERE name LIKE "A%"; -- A 开头
SELECT * FROM users WHERE name LIKE "%a"; -- a 结尾
SELECT * FROM users WHERE name LIKE "%o%"; -- 包含 o
排序 ORDER BY
SELECT * FROM users ORDER BY age DESC;
分页 LIMIT
SELECT * FROM users LIMIT 10 OFFSET 0; -- 第1页
SELECT * FROM users LIMIT 10 OFFSET 10; -- 第2页
4.3 UPDATE(更新数据)
UPDATE users SET age = 30 WHERE name = "Tom";
4.4 DELETE(删除数据)
DELETE FROM users WHERE id = 3;
⚠ 没有 WHERE 会删除全部记录:
DELETE FROM users;
5. 聚合函数(统计)
| 函数 | 作用 |
|---|---|
| COUNT() | 统计数量 |
| SUM() | 求和 |
| AVG() | 平均值 |
| MAX() | 最大值 |
| MIN() | 最小值 |
示例:
SELECT COUNT(*) FROM users;
SELECT AVG(age) FROM users;
6. GROUP BY & HAVING(分组统计)
按年龄分组,统计每个年龄有多少人:
SELECT age, COUNT(*)
FROM users
GROUP BY age;
HAVING(过滤分组结果):
SELECT age, COUNT(*)
FROM users
GROUP BY age
HAVING COUNT(*) > 2;
7. JOIN(多表连接)
表示例
users
| id | name |
|---|---|
| 1 | Tom |
| 2 | Bob |
orders
| id | user_id | price |
|---|---|---|
| 1 | 1 | 100 |
| 2 | 1 | 150 |
7.1 INNER JOIN(只显示匹配的)
SELECT users.name, orders.price
FROM users
INNER JOIN orders
ON users.id = orders.user_id;
7.2 LEFT JOIN(显示左表全部)
SELECT users.name, orders.price
FROM users
LEFT JOIN orders
ON users.id = orders.user_id;
7.3 RIGHT JOIN(显示右表全部)
SELECT * FROM a RIGHT JOIN b ON ...;
8. 子查询(Subquery)
查询比平均年龄大的用户:
SELECT * FROM users
WHERE age > (SELECT AVG(age) FROM users);
9. 索引(Index)
加快查询速度(适用于高频条件列)。
CREATE INDEX idx_email ON users(email);
10. 事务(Transaction)
用于确保一组操作要么全部成功,要么全部失败(如银行转账)。
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 或 ROLLBACK;
11. 数据类型(核心)
常见类型:
数字类
- INT
- BIGINT
- FLOAT
- DOUBLE
- DECIMAL(10,2)
字符类
- VARCHAR(n)
- TEXT
日期类
- DATE
- TIME
- DATETIME
- TIMESTAMP
12. SQL 最佳实践(必看)
✔ SELECT 不要用 SELECT *
✔ 经常查询的字段要加索引
✔ 防 SQL 注入(使用预处理语句)
✔ 避免过度使用子查询
✔ 一次插入多条记录
✔ 对大表分页不要使用 OFFSET 过大(用 ID 分页更快)
13. SQL 学习路线(从零到高级)
基础
- SELECT / INSERT / UPDATE / DELETE
- WHERE / ORDER / LIMIT
进阶
- JOIN / GROUP BY
- 索引
- 事务
高级
- 锁机制
- 查询优化(Explain)
- 视图 / 存储过程
- 分区表
- 分布式数据库
📚 想继续学习?
我可以为你生成:
📄 SQL 速查表(Cheat Sheet)
📘 MySQL / PostgreSQL 完整入门教程
🧪 真实项目的数据库设计示例
🧭 50+ SQL 实战练习题(附答案)
📦 数据库表结构最佳实践模板
你想让我继续扩展哪一部分?