一、连接说明
union、intersect等集合运算,它的特征是以 “行” 为单位进行操作,通俗点说,就是进行这些集合运算,会导致记录行数的增减,使用union会增加记录行数,使用 intersect 或 expect 会减少行记录,集合运算不会导致 “列” 数量的改变。而连接(join) 操作,就是将其他表中的列添加过来,进行 “列添加”的运算。当需要从多张表中取出不同的列组成一个新的查询结果时,就需要用的连接(join)运算了。以下是几种连接运算的简单说明。
1、join 和 inner join
join 和 inner join是一样的,为了简写省掉 inner 可直接写为 join, 内连接,表示以两个表的交集为主,查出来是两个表有交集的部分,其余没有关联就不额外显示出来,如下:

2、left join 左连接
left join 左连接,表A left join 表B,以左为主,表示以表A为主,关联上表B的数据,查出来的结果显示左边的所有数据,然后右边显示的是和左边有交集部分的数据。如下

3、right join 右连接
right join 右连接,表A right join 表B,以右为主,表示以表B为主,关联查询表A的数据,查出表B所有数据以及表A和表B有交集的数据,如下:

4、outer join
outer join 在MySQL中, 外连接必须指定主表,需指定左右,也即 left outer join,right outer join,实际上,就是 left join 和 right join,为了方便书写把outer省略掉了,在Oracle中,支持全外连接,即 full outer join;
5、交叉连接 CROSS JOIN
交叉连接 CROSS JOIN (也就是耳熟能详的的笛卡尔积),交叉连接的结果是两个表中行数的乘积,交叉连接的结果中包含了内连接,外连接,全连接的所有结果。实际业务中很少会使用交叉连接,因为交叉连接的记过没有实用价值,运算结果函数太多,需要浪费很多运算性能。
6、连接总结
下图可以囊括连接的所有情况

二、案例
1、表结构
(1)stu表
| id | name |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王二 |
(2)score表
| id | fk_stu | score |
|---|---|---|
| 1 | 1 | 10 |
| 2 | 2 | 20 |
| 4 | 4 | 40 |
2、内连接
select * from stu join score on stu.id = score.fk_stu;
| id | name | id(1) | fk_stu | score |
|---|---|---|---|---|
| 1 | 张三 | 1 | 1 | 10 |
| 2 | 李四 | 2 | 2 | 20 |
3、左连接
select * from stu left join score on stu.id = score.fk_stu;
| id | name | id(1) | fk_stu | score |
|---|---|---|---|---|
| 1 | 张三 | 1 | 1 | 10 |
| 2 | 李四 | 2 | 2 | 20 |
| 3 | 王二 |
4、右连接
select * from stu right join score on stu.id = score.fk_stu;
| id | name | id(1) | fk_stu | score |
|---|---|---|---|---|
| 1 | 张三 | 1 | 1 | 10 |
| 2 | 李四 | 2 | 2 | 20 |
| 4 | 4 | 40 |
5、全连接
select * from stu full join score on stu.id = score.fk_stu;
| id | name | id(1) | fk_stu | score |
|---|---|---|---|---|
| 1 | 张三 | 1 | 1 | 10 |
| 2 | 李四 | 2 | 2 | 20 |
| 4 | 4 | 40 | ||
| 3 | 王二 |
6、交叉连接
select * from stu cross join score;
| 1 | 张三 | 1 | 1 | 10 |
|---|---|---|---|---|
| 2 | 李四 | 1 | 1 | 10 |
| 3 | 王二 | 1 | 1 | 10 |
| 1 | 张三 | 2 | 2 | 20 |
| 2 | 李四 | 2 | 2 | 20 |
| 3 | 王二 | 2 | 2 | 20 |
| 1 | 张三 | 4 | 4 | 40 |
| 2 | 李四 | 4 | 4 | 40 |
| 3 | 王二 | 4 | 4 | 40 |



















