在平时的应用中经常需要从多个数据表中查询和读取数据,并且合并提取匹配的信息,join就是这个时候需要使用的。
Join可以在select,update和delete语句中使用。
join的用途
按照功能大致分为如下三类:
- inner join(内连接,也叫等值连接):获取两个表中字段匹配关系的记录。单独使用join也是同inner join的作用
- Left join(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- right join(右连接): 与left join的功能正好相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
示例
数据库中有两张表 TABLE_A 和 TABLE_B。并假设TABLE_A 为左表,TABLE_B 为右表。且两张数据表数据如下:
TABLE_A
ID | COM | TIME |
1 | | 2017-04-12 |
2 | | 2017-04-12 |
3 | | 2015-05-01 |
4 | | 2016-03-06 |
5 | | 2017-04-05 |
TABLE_B
COM | FRIEND |
| 10 |
| 20 |
| 22 |
Inner join
使用inner join连接上述两表,读取TABLE_A表中所有COM字段在TABLE_B表对应的FRIEND值:
select A.ID, A.COM, B.FRIEND from TABLE_A a inner join TABLE_B b on A.COM = B.COM;
则执行完的结果为:
A.ID | A.COM | B.FRIEND |
1 | | 10 |
2 | | 10 |
3 | | 20 |
4 | | 20 |
等价于where 子句
select A.ID, A.COM, B.FRIEND from TABLE_A a, TABLE_B b where A.COM = B.COM
left join
使用left join读取左边数据表的全部数据,即便右边表无对应数据。连接后无数据的内容则在数据表中正常按(NULL)显示
select A.ID, A.COM, B.FRIEND from TABLE_A a left join TABLE_B b on A.COM = B.COM
则执行完的结果为:
A.ID | A.COM | B.FRIEND |
1 | | 10 |
2 | | 10 |
3 | | 20 |
4 | | 20 |
5 | | NULL |
right join
使用right join 会读取右边数据表的全部数据,即便左边边表无对应数据。
select A.ID, A.COM, B.FRIEND from TABLE_A a right join TABLE_B b on A.COM = B.COM
则执行完的结果为:
A.ID | A.COM | B.FRIEND |
1 | | 10 |
2 | | 10 |
3 | | 20 |
4 | | 20 |
NULL | NULL | 22 |
假设语句为:
select A.ID, B.COM, B.FRIEND from TABLE_A a right join TABLE_B b on A.COM = B.COM
则执行完的结果为:
A.ID | B.COM | B.FRIEND |
1 | | 10 |
2 | | 10 |
3 | | 20 |
4 | | 20 |
NULL | | 22 |