🗃️ SQL
概述:SQL(Structured Query Language,结构化查询语言)是用于管理关系型数据库的标准语言。自 1970 年代 IBM 开发以来,SQL 已成为数据操作的事实标准,几乎所有关系型数据库都支持 SQL。
概述
SQL 属于 数据库 & 领域专用语言 分类。SQL 是一种声明式语言——你描述"要什么",数据库引擎决定"怎么做"。
语言特点
- 声明式:描述查询目标,不需要指定执行过程
- 标准化:ANSI/ISO 标准,跨数据库通用
- 集合操作:面向数据集合而非单条记录
- 丰富生态:MySQL、PostgreSQL、SQLite、Oracle、SQL Server 等
- ACID 事务:原子性、一致性、隔离性、持久性
Hello World
sql
-- 创建表并插入数据
CREATE TABLE greetings (
id INT PRIMARY KEY,
message VARCHAR(100)
);
INSERT INTO greetings VALUES (1, 'Hello, World!');
SELECT message FROM greetings WHERE id = 1;基础语法
数据定义(DDL)
sql
-- 创建表
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE,
age INT CHECK (age >= 0),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 修改表
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
ALTER TABLE users DROP COLUMN phone;
-- 删除表
DROP TABLE users;
-- 创建索引
CREATE INDEX idx_users_email ON users(email);
CREATE UNIQUE INDEX idx_users_name ON users(name);数据操作(DML)
sql
-- 插入
INSERT INTO users (name, email, age) VALUES
('Alice', 'alice@example.com', 30),
('Bob', 'bob@example.com', 25);
-- 更新
UPDATE users SET age = 31 WHERE name = 'Alice';
-- 删除
DELETE FROM users WHERE age < 18;
-- 清空表
TRUNCATE TABLE users;查询(DQL)
sql
-- 基本查询
SELECT name, age FROM users WHERE age > 20;
-- 排序与分页
SELECT * FROM users
ORDER BY age DESC
LIMIT 10 OFFSET 20;
-- 聚合函数
SELECT
COUNT(*) AS total,
AVG(age) AS avg_age,
MAX(age) AS max_age,
MIN(age) AS min_age
FROM users;
-- 分组
SELECT age, COUNT(*) AS count
FROM users
GROUP BY age
HAVING COUNT(*) > 1;
-- 连接查询
SELECT u.name, o.order_date
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
-- 子查询
SELECT name FROM users
WHERE id IN (SELECT user_id FROM orders WHERE amount > 1000);
-- 窗口函数
SELECT name, age,
ROW_NUMBER() OVER (ORDER BY age DESC) AS rank,
AVG(age) OVER () AS avg_age
FROM users;
-- CTE(公用表表达式)
WITH active_users AS (
SELECT * FROM users WHERE last_login > CURRENT_DATE - INTERVAL '30 days'
)
SELECT * FROM active_users WHERE age > 25;事务
sql
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- 或 ROLLBACK; 回滚应用领域
- 数据查询:从数据库中检索和过滤数据
- 数据操作:插入、更新和删除记录
- 数据建模:设计数据库表结构和关系
- 数据分析:聚合统计和报表生成
- 数据仓库:ETL 和 OLAP 分析查询
- 应用后端:几乎所有 Web 应用的数据层
开发环境搭建
- 选择数据库:PostgreSQL(推荐)、MySQL、SQLite
- 安装 PostgreSQL:
sudo apt install postgresql - 连接数据库:
psql -U postgres - 图形工具:DBeaver、pgAdmin、DataGrip
- 在线练习:SQLBolt、LeetCode SQL
学习路线
- 入门阶段:SELECT → WHERE → ORDER BY → 聚合函数 → GROUP BY
- 进阶阶段:JOIN → 子查询 → 窗口函数 → CTE → 索引优化
- 实战阶段:数据建模 → 事务与锁 → 存储过程 → 性能调优
- 高级阶段:查询优化 → 分区表 → 读写分离 → 分布式数据库