You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Code Academy SQL表转换课程:两个查询的差异及结果不同原因咨询

两个SQL查询的差异解析(以Codecademy表转换课程常见场景为例)

既然你提到来自Codecademy的表转换课程,我先拿课程里最常让学习者困惑的JOIN类型差异场景来拆解——这也是导致结果集不同的高频原因。假设我们有两个核心表:customers(存储客户基础信息)和orders(存储客户的订单记录),下面是两个典型的对比查询:

查询1:使用LEFT JOIN

SELECT customers.customer_id, COUNT(orders.order_id) AS order_count
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
GROUP BY customers.customer_id;

查询2:使用INNER JOIN

SELECT customers.customer_id, COUNT(orders.order_id) AS order_count
FROM customers
JOIN orders ON customers.customer_id = orders.customer_id
GROUP BY customers.customer_id;

核心差异与结果不同的原因

  • 返回的记录范围本质不同

    • 查询1用LEFT JOIN,会返回所有客户——哪怕某个客户从未下过订单,这类客户的order_count会显示为0,因为LEFT JOIN会保留左表(customers)的全部数据,右表无匹配时填充NULL。
    • 查询2用INNER JOIN(JOIN是INNER JOIN的简写),只会返回有订单记录的客户,完全没有订单的客户会被直接过滤出结果集。
  • 聚合计算的逻辑差异

    • 对于COUNT(orders.order_id),LEFT JOIN中无匹配订单的客户对应的orders.order_id是NULL,而COUNT()函数会自动忽略NULL值,所以这类客户的计数为0。
    • INNER JOIN已经提前过滤掉无订单的客户,结果里的order_count必然都是大于0的有效数值。

如果你的两个查询是其他场景(比如GROUP BY分组字段差异、WHERE与HAVING的使用区别),可以补充具体语句,但上面的JOIN差异是Codecademy表转换模块里最常见的结果不一致诱因。

内容的提问来源于stack exchange,提问作者Mendelsohn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:43:01