NATURAL JOIN vs INNER JOIN
对比点 | INNER JOIN | NATURAL JOIN |
---|---|---|
是否需要指定连接条件 | ✅ 需要使用 ON 明确指定连接字段 | ❌ 不需要写 ON ,自动匹配同名列 |
控制力 | ✅ 高:你控制连接字段和方式 | ❌ 低:自动决定,容易出错 |
可读性 | ✅ 明确清晰,推荐生产使用 | ⚠️ 可读性差,容易误用 |
常见用途 | ✅ 实际项目中常用 | 🚫 学术/练习中偶尔出现,生产中少用或禁用 |
支持程度 | ✅ 所有数据库都支持 | ❌ 有些数据库(如 SQL Server)不支持 |
GROUP BY
在 GROUP BY
中,SELECT 子句里出现的列,要么出现在 GROUP BY
里,要么要使用聚合函数(如 AVG, MAX, COUNT 等)
SELECT 中的列 | 要求 |
---|---|
分组字段 | 必须出现在 GROUP BY 中 |
非分组字段(如 salary) | 必须使用聚合函数 |
Having
对having的用法已经忘得差不多了。
HAVING
用在 GROUP BY
之后,用来筛选满足条件的分组,类似于 WHERE
,但 WHERE
是过滤行数据,HAVING
是过滤分组后的数据。如果你要根据聚合结果(如总和、计数、平均值等)来筛选,就必须用 HAVING
。
基本语法结构:
SELECT column1, aggregate_function(column2)
FROM table
GROUP BY column1
HAVING aggregate_function(column2) condition;
例如我们有这么一张表:
customer_id | total |
---|---|
1 | 100 |
1 | 150 |
2 | 200 |
3 | 50 |
SELECT customer_id, SUM(total) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(total) > 200;