SQL 速查表

SQL 速查:SELECT、JOIN、GROUP BY、INSERT、UPDATE、DELETE、聚合函数与约束等常用语句的语法与示例,写查询时快速查阅。

语句说明示例
SELECT查询列(* 表示全部)SELECT id, name FROM users
FROM指定数据来源表FROM orders
WHERE行过滤条件WHERE status = 'paid'
GROUP BY按列分组聚合GROUP BY category
HAVING对分组结果再过滤HAVING COUNT(*) > 1
ORDER BY排序(ASC/DESC)ORDER BY created_at DESC
LIMIT限制返回行数LIMIT 10
OFFSET跳过前 N 行(分页)OFFSET 20
DISTINCT去重返回SELECT DISTINCT city
JOIN内连接两表FROM a JOIN b ON a.id = b.a_id
LEFT JOIN左连接,保留左表全部行FROM a LEFT JOIN b ON a.id = b.a_id
RIGHT JOIN右连接,保留右表全部行FROM a RIGHT JOIN b ON a.id = b.a_id
INNER JOIN内连接(同 JOIN)FROM a INNER JOIN b ON a.id = b.a_id
ON连接条件ON a.id = b.a_id
AS表或列别名SELECT name AS 姓名
INSERT INTO插入行INSERT INTO users (name) VALUES ('Tom')
UPDATE更新行UPDATE users SET name = 'Tom' WHERE id = 1
DELETE删除行DELETE FROM users WHERE id = 1
CREATE TABLE建表CREATE TABLE t (id INT PRIMARY KEY)
ALTER TABLE修改表结构ALTER TABLE t ADD COLUMN age INT
DROP TABLE删除表DROP TABLE t
PRIMARY KEY主键约束id INT PRIMARY KEY
FOREIGN KEY外键约束FOREIGN KEY (a_id) REFERENCES a(id)
INDEX创建索引加速查询CREATE INDEX idx_name ON users(name)
UNION合并两个查询结果(去重)SELECT a FROM t1 UNION SELECT a FROM t2
LIKE模糊匹配(% 任意, _ 单字)WHERE name LIKE 'T%'
IN值属于集合WHERE status IN ('paid','done')
BETWEEN范围闭区间WHERE age BETWEEN 18 AND 30
NULL / IS NULL空值判断(不能用 =)WHERE deleted_at IS NULL
COUNT / SUM / AVG聚合函数SELECT COUNT(*) FROM users
CASE WHEN条件表达式CASE WHEN age>18 THEN 'adult' ELSE 'minor' END
EXPLAIN查看执行计划EXPLAIN SELECT * FROM users

常见问题

INNER JOIN 和 LEFT JOIN 有什么区别?

INNER JOIN 只返回两表都匹配的行;LEFT JOIN 返回左表全部行,右表无匹配时对应列填 NULL。需要"保留主表所有记录"时用 LEFT JOIN,只需交集时用 INNER JOIN。

WHERE 和 HAVING 有什么区别?

WHERE 在分组前过滤行;HAVING 在 GROUP BY 之后过滤分组结果,且可引用聚合函数(如 COUNT(*))。不能在 WHERE 中使用聚合函数。

LIKE 的 % 和 _ 有什么区别?

% 匹配任意长度(含零)字符;_ 只匹配单个字符。如 'T%' 匹配以 T 开头任意串,'T_m' 只匹配 T 后一个任意字符再接 m(如 Tom)。

如何判断 NULL?

NULL 表示未知,不能用 = NULL 判断,必须用 IS NULL / IS NOT NULL。在多数数据库中 NULL 与任何值比较都返回未知(非真),容易踩坑。