LEFT JOIN与WHERE同时用,带给我的重灾难!
1. 表信息
1.1 用户表
1.2 用户兴趣爱好表
2. left join 语句【本文论点】
SELECT
*
FROM
d_user u
LEFT JOIN d_hobby h ON u.id = h.userId
WHERE
h.hobby != '睡觉'
思考一下这段SQL的查询结果是什么?(思考完看评论区,有结果)
SELECT
*
FROM
d_user u
LEFT JOIN d_hobby h ON u.id = h.userId
AND h.hobby != '睡觉'
再思考一下这段SQL的查询结果又是什么?(思考完看评论区,有结果)
3. left join总结
3.1 我的错误论据:
我一直以为上面第一段SQL语句的结果是用户表中所有的数据,不管有没有where!!
3.2 客观论据:
1. 先将left join的左表的所有符合结果查询出来;
2. 查询完left join的关联数据后,再用where语句对其进行过滤(先后关系,涉及where语句要注意一下)。
4. 提问
第二段SQL中为什么d_hobby表中为NULL的数据也被过滤掉了?