SQL 速查表:常用命令、连接(Join)与函数完全参考
SQL(结构化查询语言)是管理和操作关系型数据库的标准语言。无论您使用的是 MySQL、PostgreSQL、SQL Server 还是 SQLite,这些核心命令都是您与数据库交互的基础。
本速查表可作为 SQL 常用语法和最佳实践的快速参考。
1. 基础数据查询
最常见的 SQL 任务是从表中检索数据。
| 命令 | 说明 | 示例 |
|---|---|---|
SELECT |
指定要检索的列 | SELECT name, age |
FROM |
指定要检索的表 | FROM users |
WHERE |
根据条件过滤结果集 | WHERE age > 18 |
ORDER BY |
对结果集进行排序 (ASC 或 DESC) | ORDER BY created_at DESC |
LIMIT |
限制返回的行数 | LIMIT 10 |
DISTINCT |
仅返回唯一值 | SELECT DISTINCT city |
查询示例:
SELECT name, email
FROM users
WHERE country = 'CN'
ORDER BY name ASC
LIMIT 5;
2. SQL 连接 (Joins):合并数据
连接允许您基于相关列从多个表中检索数据。
- INNER JOIN (内连接):当两个表中都有匹配项时返回行。
- LEFT (OUTER) JOIN (左外连接):返回左表中的所有行,以及右表中匹配的行。
- RIGHT (OUTER) JOIN (右外连接):返回右表中的所有行,以及左表中匹配的行。
- FULL (OUTER) JOIN (全外连接):当其中一个表中有匹配项时就返回行。
连接示例:
SELECT orders.id, users.name
FROM orders
INNER JOIN users ON orders.user_id = users.id;
3. 聚合与分组
聚合函数对一组值执行计算并返回单个值。
| 函数 | 说明 |
|---|---|
COUNT() |
返回行数 |
SUM() |
返回数值列的总和 |
AVG() |
返回平均值 |
MIN() |
返回最小值 |
MAX() |
返回最大值 |
GROUP BY 和 HAVING:
GROUP BY 用于结合聚合函数,根据一个或多个列对结果集进行分组。HAVING 用于过滤分组后的结果。
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
4. 数据操作 (DML)
用于添加、更新和删除数据的命令。
- INSERT:添加新行。
INSERT INTO users (name, email) VALUES ('张三', '[email protected]'); - UPDATE:修改现有行。
UPDATE users SET email = '[email protected]' WHERE id = 1; - DELETE:删除行。
DELETE FROM users WHERE id = 1;
5. 架构定义 (DDL)
用于定义和管理数据库结构的命令。
- CREATE TABLE:创建新表。
CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(100), price DECIMAL(10, 2) ); - ALTER TABLE:修改现有表结构(添加/删除列)。
ALTER TABLE users ADD last_login TIMESTAMP; - DROP TABLE:删除表及其所有数据。
DROP TABLE temp_data; - Indexes (索引):用于加速数据检索。
CREATE INDEX idx_user_email ON users(email);
常见问题 (FAQ)
Q: SQL 与 NoSQL 应该如何选择?
A: 当您的数据是结构化的、需要复杂的连接查询以及对事务的 ACID 合规性有要求时,请使用 SQL(关系型)。对于非结构化数据、高可扩展性需求以及模式经常变化的快速开发周期,请使用 NoSQL(非关系型)。
Q: 数据库设计的最佳实践有哪些?
A:
- 规范化 (Normalization):减少数据冗余。
- 命名规范:使用一致的、小写的、下划线分隔的名称。
- 主键:每个表都应该有一个唯一的标识符。
- 合理使用索引:索引可以加快读取速度,但会减慢写入速度。
Q: 什么是 SQL 注入?如何预防?
A: SQL 注入是一种漏洞,攻击者可以执行恶意 SQL 语句。预防方法:切勿将用户输入直接拼接进查询语句。请使用编程语言数据库驱动提供的 预处理语句 (Prepared Statements) 或参数化查询。
Q: 如何优化 SQL 性能?
A:
- 避免使用
SELECT *;只获取您需要的列。 - 使用
EXPLAIN分析查询执行计划。 - 确保在
WHERE和JOIN子句中使用的列上有适当的索引。 - 在
JOIN更高效时,避免使用子查询。
Tool3M 上的相关工具
- SQL 格式化:清理并格式化您的 SQL 查询,提高可读性。
- JSON 转 CSV:在 JSON 和 CSV 格式之间转换您的数据库导出文件。