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的数据也被过滤掉了?