MySQL-inner join、left join、right join區別

創建實驗環境

create database test;

use test;

create table ta (aid int(1),aname(5));

insert into ta values('1','1001');
insert into ta values('2','1002');
insert into ta values('3','1003');
insert into ta values('4','1004');
insert into ta values('5','1005');

create table tb (bid int(2),bname(5));

insert into tb values('1','2001');
insert into tb values('2','2002');
insert into tb values('3','2003');
insert into tb values('4','2004');
insert into tb values('8','2005');

查看兩表

select * from ta;
+------+-------+
| aid  | aname |
+------+-------+
|    1 |  1001 |
|    2 |  1002 |
|    3 |  1003 |
|    4 |  1004 |
|    5 |  1005 |
+------+-------+

select * from tb;
+------+-------+
| bid  | bname |
+------+-------+
|    1 |  2001 |
|    2 |  2002 |
|    3 |  2003 |
|    4 |  2004 |
|    8 |  2005 |
+------+-------+

left join(左連接)

select * from ta left join tb on ta.aid=tb.bid;

+------+-------+------+-------+
| aid  | aname | bid  | bname |
+------+-------+------+-------+
|    1 |  1001 |    1 |  2001 |
|    2 |  1002 |    2 |  2002 |
|    3 |  1003 |    3 |  2003 |
|    4 |  1004 |    4 |  2004 |
|    5 |  1005 | NULL |  NULL |
+------+-------+------+-------+

left join將A表(ta)作爲基準表與B表進行匹配,匹配的條件是A表中的aid等於B表中的bid(ta,aid=tb.bid),所以可以看到在B表中找不到bid=5的行,所以B表中對應的行,爲NULL


right join(右連接)

select * from ta right join tb on ta.aid=tb.bid;

+------+-------+------+-------+
| aid  | aname | bid  | bname |
+------+-------+------+-------+
|    1 |  1001 |    1 |  2001 |
|    2 |  1002 |    2 |  2002 |
|    3 |  1003 |    3 |  2003 |
|    4 |  1004 |    4 |  2004 |
| NULL |  NULL |    8 |  2005 |
+------+-------+------+-------+

與left join相反,right join使用的是右邊的B表作爲基準,在A表中沒有找到aid=8的行,所有這裏爲NULL


inner join(內連接)

select * from ta inner join tb on ta.aid=tb.bid;

+------+-------+------+-------+
| aid  | aname | bid  | bname |
+------+-------+------+-------+
|    1 |  1001 |    1 |  2001 |
|    2 |  1002 |    2 |  2002 |
|    3 |  1003 |    3 |  2003 |
|    4 |  1004 |    4 |  2004 |
+------+-------+------+-------+

在inner join中,不以任何一表爲基準,只顯示雙方都有的行,A表與B表中都有id1,2,3,4但對方沒有5和8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章