SQL 指南

下面是一份系统、清晰、适合从零到进阶学习的 《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

idname
1Tom
2Bob

orders

iduser_idprice
11100
21150

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 实战练习题(附答案)
📦 数据库表结构最佳实践模板

你想让我继续扩展哪一部分?

文章已创建 2965

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部