来,梳理一下清晰的思考过程:
【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)。

京公网安备 11010502036488号