Mysql中inner join 和left join 与right join的区别
一、区别
- left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
- right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
- inner join(等值连接) 只返回两个表中联结字段相等的行
二、实例说明
有以下两张表:
表T_A:
A_ID | NAME |
---|---|
1 | AAA |
2 | BBB |
3 | CCC |
4 | DDD |
表T_B:
B_ID | NAME |
---|---|
1 | aaa |
2 | bbb |
3 | ccc |
5 | ddd |
1.left join
==sql语句如下==:
select * from T_A A
left join T_B B
on A.A_ID = B.B_ID
==结果如下==:
A_ID | NAME | B_ID | NAME |
---|---|---|---|
1 | AAA | 1 | aaa |
2 | BBB | 2 | bbb |
3 | CCC | 3 | ccc |
4 | DDD | null | null |
==结果说明==:
left join是以T_A表的记录为基础的,T_A可以看成左表,T_B可以看成右表,left join是以左表为准的。
换句话说,左表(T_A)的记录将会全部表示出来,而右表(T_B)只会显示符合搜索条件的记录(例子中为: A.A_ID = B.B_ID)。
B表记录不足的地方均为NULL。
2.right join
==sql语句如下==:
select * from T_A A
right join T_B B
on A.A_ID = B.B_ID
==结果如下==:
A_ID | NAME | B_ID | NAME |
---|---|---|---|
1 | AAA | 1 | aaa |
2 | BBB | 2 | bbb |
3 | CCC | 3 | ccc |
null | null | 5 | ddd |
==结果说明==:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(T_B)为基础的,T_A表不足的地方用NULL填充。
3.inner join
==sql语句如下==:
select * from T_A A
inner join T_B B
on A.A_ID = B.B_ID
==结果如下==:
A_ID | NAME | B_ID | NAME |
---|---|---|---|
1 | AAA | 1 | aaa |
2 | BBB | 2 | bbb |
3 | CCC | 3 | ccc |
==结果说明==:
很明显,这里只显示出了A.A_ID = B.B_ID的记录,这说明inner join并不以谁为基础,它只显示符合条件的记录。