美文网首页服务器后端开发
Mysql:ON 与 WHERE 的区别

Mysql:ON 与 WHERE 的区别

作者: 小菜荔枝 | 来源:发表于2018-06-22 17:26 被阅读3114次

前言

很多同学在学习 Mysql 表关联的时候弄不清 ONWHERE 的区别,不知道条件应该写在 ON 里面还是 WHERE 里面,作者在工作的时候也入过坑,总觉得条件写在哪里查询结果都是一样的,最后出错坏了事,差点惹了大祸。所以今天简单易懂的总结一下他们的区别,大家共同学习。

准备工作

我们先准备两个表,并造一些数据:

-- t1
create table t1
(
    id bigint default '0' not null comment '主键id',
    name char(100) default '' not null comment '姓名',
    age int default '0' not null
);
-- t2
create table t2
(
    id bigint default '0' not null comment '主键id',
    goals int default '0' not null comment '进球数',
    matches int default '0' not null comment '比赛编号'
);
t1, t2

探究

口诀:先执行 ON,后执行 WHEREON 是建立关联关系,WHERE 是对关联关系的筛选。记住这句话就可以准确地判断查询结果了,我们通过两个 sql 来进行分析:

SELECT t1.id, t1.name, t1.age FROM t1 LEFT JOIN t2 ON t1.id = t2.id WHERE matches = 2; -- 条件放在 WHERE
SELECT t1.id, t1.name, t1.age FROM t1 LEFT JOIN t2 ON t1.id = t2.id AND matches = 2; -- 条件放在 ON

执行第一个 sql 时,前提是 LEFT JOIN,所以左边的数据在创建关联关系时会保留,根据口诀,先执行 ON 建立关联关系,然后通过 WHERE 筛选,过程如下:

sql1

第二个 sql 没有 WHERE,那么 ON 建立的关联关系就是最终结果:

sql2

通过这两个 sql 可以很好的区分 WHEREON 的区别了,希望大家使用的时候多注意这一点,避免犯错!

简书作者 小菜荔枝原创 转载请联系作者获得授权

相关文章

网友评论

    本文标题:Mysql:ON 与 WHERE 的区别

    本文链接:https://www.haomeiwen.com/subject/sygtyftx.html