SQL(Structured Query Language,结构化查询语言)是一种专门用于管理关系型数据库的编程语言。它由 Donald Chamberlin 和 Raymond Boyce 于 1974 年在 IBM 开发,最初称为 SEQUEL(Structured English Query Language)。SQL 是 数据领域最通用的语言,无论你使用 MySQL、PostgreSQL、Oracle 还是 SQL Server,SQL 语法基本一致。
SQL 的核心定位是 声明式的数据操作语言。它提供了:
1970 年,Edgar F. Codd 提出了关系模型(Relational Model)。1974 年,IBM 的 Donald Chamberlin 和 Raymond Boyce 开发了 SEQUEL 语言,用于管理关系型数据库。1979 年,Oracle 成为首个商业化 SQL 数据库产品。
-- 基础 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");
-- 插入数据
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;
-- 创建表
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;
-- 授予权限
GRANT SELECT, INSERT ON database.table TO "username"@"host";
-- 回收权限
REVOKE DELETE ON database.table FROM "username"@"host";
-- 事务开始
START TRANSACTION;
-- 执行操作
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;
-- 公用表表达式(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;
SELECT、WHERE、ORDER BY、LIMIT、聚合函数(COUNT/SUM/AVG)
多表连接(JOIN)、分组(GROUP BY)、子查询、窗口函数
INSERT、UPDATE、DELETE、事务管理、索引优化
存储过程、触发器、视图、性能调优、数据库设计
SQL 是数据世界的"普通话"。
无论你用什么编程语言(Java、Python、Go、PHP),无论你做什么应用(Web、移动、桌面),只要需要存储和查询数据,SQL 就是必须掌握的核心技能。
SQL 的声明式哲学让数据操作变得简单高效。虽然 NoSQL 在某些场景下更有优势,但关系型数据库和 SQL 在 结构化数据、事务一致性、报表分析 领域仍然无可替代。
"SQL 可能是你学过的最有价值的语言——它永远不会过时。" 💾
—— 技术社区评价