前言
很多同学在学习 Mysql 表关联的时候弄不清 ON
与 WHERE
的区别,不知道条件应该写在 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 '比赛编号'
);
探究
口诀:先执行 ON
,后执行 WHERE
;ON
是建立关联关系,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
筛选,过程如下:
第二个 sql 没有 WHERE
,那么 ON
建立的关联关系就是最终结果:
通过这两个 sql 可以很好的区分 WHERE
和 ON
的区别了,希望大家使用的时候多注意这一点,避免犯错!
简书作者 小菜荔枝原创 转载请联系作者获得授权