創建實驗環境
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