SQL Query常见错误小结

NATURAL JOIN vs INNER JOIN

对比点INNER JOINNATURAL JOIN
是否需要指定连接条件✅ 需要使用 ON 明确指定连接字段❌ 不需要写 ON自动匹配同名列
控制力✅ 高:你控制连接字段和方式❌ 低:自动决定,容易出错
可读性✅ 明确清晰,推荐生产使用⚠️ 可读性差,容易误用
常见用途✅ 实际项目中常用🚫 学术/练习中偶尔出现,生产中少用或禁用
支持程度✅ 所有数据库都支持❌ 有些数据库(如 SQL Server)不支持
如果sql query里只写了join, 那默认就是inner join,只会返回两个表中匹配的行。

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_idtotal
1100
1150
2200
350
现在要查询总销售额超过200的客户,那可以这么写:
SELECT customer_id, SUM(total) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(total) > 200;

Scroll to Top