来,梳理一下清晰的思考过程:

【1】明确需求:

  • user_info表是所有注册用户。
  • order_log表是有下过订单的记录。
  • 需要找出那些注册了,但从来没在order_log下过单的用户。
  • 结果是返回一个数量:cnt。

【2】解题思路:

左连接(LEFT JOIN),并筛选右表(order_log)为空的数据!

因为:

  • LEFT JOIN能保留左边(user_info)全部数据。
  • 如果右边(order_log)没有匹配的,就会是NULL。
  • NULL代表没有下单。

【3】标准SQL写法:

sql复制编辑SELECT 
    COUNT(*) AS cnt
FROM 
    user_info u
LEFT JOIN 
    order_log o
ON 
    u.uid = o.uid
WHERE 
    o.order_id IS NULL;

【4】解释每一步:

  • LEFT JOIN:把所有user_info的uid拿出来,左边全保留。
  • ON u.uid = o.uid:根据用户id关联。
  • WHERE o.order_id IS NULL:只要那些在order_log没有下单记录的用户。
  • COUNT(*):最后统计有多少这样的用户。

✅ 最后的输出就是一行一列:cnt = 2(比如示例中是user_0002和user_0003)。