LEFT JOIN 时 筛选条件写在 ON 后面还是 WHERE 和后面

在我们写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 后面的筛选条件,,自然就会出现我们期望得到的结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值