Skip to content

🗃️ 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 应用的数据层

开发环境搭建

  1. 选择数据库:PostgreSQL(推荐)、MySQL、SQLite
  2. 安装 PostgreSQL:sudo apt install postgresql
  3. 连接数据库:psql -U postgres
  4. 图形工具:DBeaver、pgAdmin、DataGrip
  5. 在线练习:SQLBoltLeetCode SQL

学习路线

  1. 入门阶段:SELECT → WHERE → ORDER BY → 聚合函数 → GROUP BY
  2. 进阶阶段:JOIN → 子查询 → 窗口函数 → CTE → 索引优化
  3. 实战阶段:数据建模 → 事务与锁 → 存储过程 → 性能调优
  4. 高级阶段:查询优化 → 分区表 → 读写分离 → 分布式数据库

返回首页 | 查看所有语言

编程语言技术文档