在我们写SQL的时候我们经常会使用到 LEFT JOIN ,那么在我们使用的时候总是要对表做一些筛选条件,那么我们的筛选条件是写在 ON 后面,还是写在WHERE后面呢?下面让我们来写一个例子测试一下。
首先我们先建两张表,student表和home表,表结构如下:
student表:
home表:
两个表主要是通过id来关联。
现在我们需要做的一个查询操作是联查两张表,找到住址是深圳的学生学习,返回的字段有学生表的所有信息以及住址表的地址。
编写的SQL如下,下面我们分别提通过将筛选条件放在 ON 后面和WHERE后面来看看到底两者返回的数据都是怎么样的。
放在 ON 后面的SQL:
SELECT
t1.*,
t2.address
FROM
student t1
LEFT JOIN home t2 ON t1.id = t2.id
AND t2.address = '深圳'
运行结果是如下图:
放在 WHERE 后面的SQL是:
SELECT
t1.*,
t2.address
FROM
student t1
LEFT JOIN home t2 ON t1.id = t2.id
WHERE
t2.address = '深圳'
运行结果如下:
通过这两个对比我们可以看到很明显第二个才是符合我们需求的那一个SQL。
由于LEFT JOIN 是以左表为主表,匹配在右表中匹配,匹配到的就会在左表的基础上加上右表中你选定的字段,但是没有匹配到的话就会返回 null,此时由于筛选条件在 ON 后面,筛选完了再做LEFT JOIN的匹配,自然会出现第一种的情况。
而第二种的情况下则是左表和右表先做 LEFTJOIN的匹配,在做完这个的匹配时出现的数据如下图:
此时再去执行 WHERE 后面的筛选条件,,自然就会出现我们期望得到的结果。