对 left join 多个表的join 和 on 的分析Demo

1demo建表
-- 人事表
CREATE TABLE Man(
Man_Id TINYINT ,
Man_Name VARCHAR ( 10 ),
Zw_Id TINYINT );
-- 职务表
CREATE TABLE Zw(
Zw_Id TINYINT ,
Zw_Name VARCHAR ( 10 ));
-- 工资表
CREATE TABLE GZ(
Man_Id TINYINT ,
Money VARCHAR ( 10 ),
Sex_Id TINYINT );
-- 性别表
CREATE TABLE xb(
Sex_Id TINYINT ,
Sex_Name VARCHAR ( 10 ));
插入的数据
对 left join 多个表的join 和 on 的分析Demo_第1张图片



对 left join 多个表的join 和 on 的分析Demo_第2张图片
2_讨论多个left join之间的关系
1_SELECT * FROMgz g LEFT JOIN xb x ONg. Sex_Id=x. Sex_Id;

2_SELECT * FROMgz g LEFT JOIN xb x ONg. Sex_Id=x. Sex_Id LEFT JOINzw z ON x. Sex_Id=z. Zw_Id;

3_SELECT * FROMgz g LEFT JOIN xb x ONg. Sex_Id=x. Sex_Id LEFT JOINzw z ON g. Sex_Id=z. Zw_Id;


总结
多个left join 分析ABC 三表
当 A和B left join时 on的条件是表达A和B之间的关系的 ,紧接着在leftjoin C那么其实主要看on后面的条件.
ON 后是A和C之间的关系关联 那么 有可能在第一步A和B的交集不属于第二个A和C之间的交集所以会造成 图3中中间部分的null的产生, A + (A∩B)∩(A∩C)
同理图二最后出现的两个null 是因为 A和C 的交集 交上 B和C的交集只有一个结果 :A + (A∩B)∩(B∩C)
两种情况是不同的 ,所以在企业开发的时候需要注意!!

Mysql Join语法解析与性能分析

最后感谢大家阅读,希望大家留言讨论!

你可能感兴趣的:(SQL)