返回主页 学习路径
SQL
结构化查询语言 · 数据世界的普通话
SQL(Structured Query Language)由 Donald Chamberlin 和 Raymond Boyce 于 1974 年在 IBM 开发。SQL 是一种声明式语言——你告诉数据库"要什么",数据库决定"怎么做"。SQL 是关系型数据库(MySQL、PostgreSQL、Oracle、SQL Server)的通用语言。无论你使用哪种编程语言开发应用,只要涉及关系型数据库,SQL 就是不可或缺的技能。SQL 也是数据分析师和商业智能(BI)工程师的核心工具。
数据通用语 · 数据库必备
📅 诞生时间1974年 · Donald Chamberlin / Raymond Boyce (IBM)
🧩 编程范式声明式 · 集合操作
📊 类型系统—(查询语言)
⚡性能
7/10
📦生态
10/10
🧠易用
7/10
🚀并发
3/10

📑 本文目录

📌 第一部分:SQL 概览与定位

1.1 定义与全称

SQL(Structured Query Language,结构化查询语言)是一种专门用于管理关系型数据库的编程语言。它由 Donald Chamberlin 和 Raymond Boyce 于 1974 年在 IBM 开发,最初称为 SEQUEL(Structured English Query Language)。SQL 是 数据领域最通用的语言,无论你使用 MySQL、PostgreSQL、Oracle 还是 SQL Server,SQL 语法基本一致。

1.2 核心定位

SQL 的核心定位是 声明式的数据操作语言。它提供了:

1.3 主要应用领域

1.4 知名案例


📜 第二部分:SQL 的历史与发展演进

2.1 诞生背景(1974年)

1970 年,Edgar F. Codd 提出了关系模型(Relational Model)。1974 年,IBM 的 Donald Chamberlin 和 Raymond Boyce 开发了 SEQUEL 语言,用于管理关系型数据库。1979 年,Oracle 成为首个商业化 SQL 数据库产品。

2.2 关键版本里程碑

2.3 各数据库的方言差异


⚙️ 第三部分:核心语法与语言特性

3.1 数据查询语言(DQL)—— SELECT

-- 基础 SELECT
SELECT column1, column2 FROM table_name;

-- 条件查询
SELECT * FROM users WHERE age > 18;

-- 排序
SELECT * FROM products ORDER BY price DESC;

-- 聚合函数
SELECT COUNT(*), AVG(price), MAX(price), MIN(price)
FROM products;

-- 分组
SELECT category, COUNT(*), AVG(price)
FROM products
GROUP BY category;

-- 分组后过滤
SELECT category, COUNT(*)
FROM products
GROUP BY category
HAVING COUNT(*) > 10;

-- 多表连接
SELECT u.name, o.order_date, o.total
FROM users u
JOIN orders o ON u.id = o.user_id;

-- 左连接
SELECT u.name, o.order_date
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

-- 子查询
SELECT name, age
FROM users
WHERE age > (SELECT AVG(age) FROM users);

-- 窗口函数
SELECT name, salary,
    RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;

-- 分页(MySQL)
SELECT * FROM products LIMIT 10 OFFSET 20;

-- 全文搜索
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST("keyword");

3.2 数据操作语言(DML)—— INSERT、UPDATE、DELETE

-- 插入数据
INSERT INTO users (name, email, age)
VALUES ("Alice", "alice@example.com", 25);

-- 批量插入
INSERT INTO users (name, email, age) VALUES
    ("Bob", "bob@example.com", 30),
    ("Charlie", "charlie@example.com", 35);

-- 更新数据
UPDATE users SET age = 26 WHERE name = "Alice";

-- 条件更新
UPDATE products
SET price = price * 1.1
WHERE category = "Electronics";

-- 删除数据
DELETE FROM users WHERE id = 123;

-- 清空表(快速)
TRUNCATE TABLE temp_data;

3.3 数据定义语言(DDL)—— CREATE、ALTER、DROP

-- 创建表
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    age INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 创建索引
CREATE INDEX idx_users_email ON users(email);

-- 添加外键约束
ALTER TABLE orders
ADD CONSTRAINT fk_orders_user
FOREIGN KEY (user_id) REFERENCES users(id);

-- 修改表结构
ALTER TABLE users ADD COLUMN phone VARCHAR(20);

-- 删除表
DROP TABLE temp_data;

3.4 数据控制语言(DCL)—— GRANT、REVOKE

-- 授予权限
GRANT SELECT, INSERT ON database.table TO "username"@"host";

-- 回收权限
REVOKE DELETE ON database.table FROM "username"@"host";

3.5 事务管理

-- 事务开始
START TRANSACTION;

-- 执行操作
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 提交事务
COMMIT;

-- 回滚事务
ROLLBACK;

3.6 高级特性

-- 公用表表达式(CTE,WITH)
WITH high_value_orders AS (
    SELECT user_id, SUM(total) as total_spent
    FROM orders
    GROUP BY user_id
    HAVING total_spent > 10000
)
SELECT u.name, h.total_spent
FROM users u
JOIN high_value_orders h ON u.id = h.user_id;

-- 递归查询
WITH RECURSIVE category_tree AS (
    SELECT id, name, parent_id FROM categories WHERE parent_id IS NULL
    UNION ALL
    SELECT c.id, c.name, c.parent_id
    FROM categories c
    JOIN category_tree ct ON c.parent_id = ct.id
)
SELECT * FROM category_tree;

-- JSON 操作(PostgreSQL/MySQL 5.7+)
SELECT json_extract(data, "$.name") FROM users;

-- 全文搜索排名
SELECT title, MATCH(title, content) AGAINST("keyword") AS relevance
FROM articles
WHERE MATCH(title, content) AGAINST("keyword")
ORDER BY relevance DESC;

⚡ 第四部分:SQL 优化与最佳实践

4.1 索引优化

4.2 查询优化

4.3 安全最佳实践


⚖️ 第五部分:SQL 与其他技术对比

5.1 SQL vs NoSQL

5.2 SQL vs Python(数据处理)

5.3 MySQL vs PostgreSQL


🧠 第六部分:学习建议

1
基础入门

SELECT、WHERE、ORDER BY、LIMIT、聚合函数(COUNT/SUM/AVG)

2
核心进阶

多表连接(JOIN)、分组(GROUP BY)、子查询、窗口函数

3
数据操作

INSERT、UPDATE、DELETE、事务管理、索引优化

4
高级方向

存储过程、触发器、视图、性能调优、数据库设计

推荐学习资源


🎯 总结升华

SQL 是数据世界的"普通话"。

无论你用什么编程语言(Java、Python、Go、PHP),无论你做什么应用(Web、移动、桌面),只要需要存储和查询数据,SQL 就是必须掌握的核心技能

SQL 的声明式哲学让数据操作变得简单高效。虽然 NoSQL 在某些场景下更有优势,但关系型数据库和 SQL 在 结构化数据、事务一致性、报表分析 领域仍然无可替代。

"SQL 可能是你学过的最有价值的语言——它永远不会过时。" 💾

—— 技术社区评价

🔖 相关标签
#数据库 #MySQL #PostgreSQL #查询 #数据分析 #ETL #事务
📄 本文档为 SQL 完整白皮书 · 最后更新于 2026年06月28日