table1 | table2 | table3 | |||||
id | name | id | password | id | depart | ||
1 | tom | 1 | 123 | 1 | java | ||
2 | tracy | 2 | 1234 | 2 | c++ | ||
3 | thomas | 4 | 12345 | 3 | a++ | ||
4 | b++ |
三张表如果都是左连接
select * from table1 t1
left join table2 t2 on t1.id=t2.id
left join table3 t3 on t2.id=t3.id;
相当于,t1先和t2左连接,条件是t1.id=t2.id,然后他t1在和t3左连接,条件是t2.id=t3.id(因为之前t1.id=t2.id,此时相当于t1.id=t2.id=t3.id,相当于取三个表的共同id,即1和2),所以输出结果为
三张表如果是一左一右
select * from table1 t1
left join table2 t2 on t1.id=t2.id
right join table3 t3 on t2.id=t3.id;
相当于,t1先和t2左连接,条件是t1.id=t2.id,然后他t1在和t3右连接,条件是t2.id=t3.id(因为之前t1.id=t2.id,此时相当于t1.id=t2.id=t3.id,相当于取三个表的共同id,即1和2),所以输出结果为
总结:1.多表连接是第一个表依次和第二,第三进行连接,最后一个外连接决定哪个表显示所有数据。
2.如果t1和t3右连接,条件是t2.id=t3.id,那么其实相当于t1.id=t2.id=t3,id,这样t1这边只会用和t2共有的id去和t3连接,可以修改为t1.id=t3.id,这样就会用t1所有的id去和t3连接