多表关联(概念介绍)
概念介绍
leftjoin(左联接)返回包括左表中的所有记录和右表中联结字段相等的记录
rightjoin(右联接)返回包括右表中的所有记录和左表中联结字段相等的记录
innerjoin(等值连接)只返回两个表中联结字段相等的行
full join(全值连接)返回结果是left join和right join的并集
举例
表A
| aID | aNum |
|---|---|
| 1 | a20181111 |
| 2 | a20182222 |
| 3 | a20183333 |
| 4 | a20184444 |
| 5 | a20185555 |
表B
| bID | bName |
|---|---|
| 1 | b20181111 |
| 2 | b20182222 |
| 3 | b20183333 |
| 4 | b20184444 |
| 6 | b20186666 |
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
| aID | aNum | bID | bName |
|---|---|---|---|
| 1 | a20181111 | 1 | b20181111 |
| 2 | a20182222 | 2 | b20182222 |
| 3 | a20183333 | 3 | b20183333 |
| 4 | a20184444 | 4 | b20184444 |
| 5 | a20185555 | NULL | NULL |
结果说明:
left join是以A表的记录为基础的,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为:A.aID=B.bID).
B表记录不足的地方均为NULL.
2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID
结果如下:
| aID | aNum | bID | bName |
|---|---|---|---|
| 1 | a20181111 | 1 | b20181111 |
| 2 | a20182222 | 2 | b20182222 |
| 3 | a20183333 | 3 | b20183333 |
| 4 | a20184444 | 4 | b20184444 |
| NULL | NULL | 6 | b20186666 |
结果说明:
left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
3.inner join
sql语句如下:
select * from A
inner join B
on A.aID = B.bID
结果如下:
| aID | aNum | bID | bName |
|---|---|---|---|
| 1 | a20181111 | 1 | b20181111 |
| 2 | a20182222 | 2 | b20182222 |
| 3 | a20183333 | 3 | b20183333 |
| 4 | a20184444 | 4 | b20184444 |
结果说明:
这里只显示出了A.aID=B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
4.full join
sql语句如下
select * from A
full join B
on A.aID = B.bID
结果如下:
| aID | aNum | bID | bName |
|---|---|---|---|
| 1 | a20181111 | 1 | b20181111 |
| 2 | a20182222 | 2 | b20182222 |
| 3 | a20183333 | 3 | b20183333 |
| 4 | a20184444 | 4 | b20184444 |
| 5 | a20185555 | NULL | NULL |
| NULL | NULL | 6 | b20186666 |
结果说明:
这里取了(A)表和(B)表的并集,两表不足的地方用null填充.