在使用SQL JOIN的时候发现在使用 ON 和 WHERE 筛选数据时结果不一样,所以创了两个表测试下.
创建测试表t3,t4,并插入数据
CREATE TABLE t3(
rn int,
zjhm VARCHAR(50),
`name` VARCHAR(50)
)
CREATE TABLE t4(
rn int,
zjhm VARCHAR(50),
`phone` VARCHAR(50)
)
TRUNCATE TABLE t3;
TRUNCATE TABLE t4;
INSERT t3(rn,zjhm,name) VALUES(3,'101','A1013');
INSERT t3(rn,zjhm,name) VALUES(2,'101','A1012');
INSERT t3(rn,zjhm,name) VALUES(1,'101','A1011');
INSERT t3(rn,zjhm,name) VALUES(2,'102','A1022');
INSERT t3(rn,zjhm,name) VALUES(1,'102','A1021');
INSERT t3(rn,zjhm,name) VALUES(1,'103','A1031');
INSERT t4(rn,zjhm,phone) VALUES(1,'101','10011');
INSERT t4(rn,zjhm,phone) VALUES(2,'101','10012');
INSERT t4(rn,zjhm,phone) VALUES(1,'102','1002');
INSERT t4(rn,zjhm,phone) VALUES(1,'103','1003');
先简单JOIN:
-- sql1
ON:
-- sql2
-- sql3
WHERE:
-- sql4
-- sql5
结论:
对比发现,LEFT JOIN在ON条件作用于驱动表(左表)的情况下,不符合条件的数据也会被保留一条,只是会关联不上右表(sql2).
而如果ON条件作用于右表,不符合条件的记录都会被筛选掉(sql3).
而使用WHRER,左表和右表都会被影(sql4,sql5).