SQL JOIN 用于把来自两个或多个表的数据或行基于它们的公共字段结合起来。有四种不同的JOIN方式:
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL JOIN
在这里在线SQL网页里面有两张表,students
表
id |
class_id |
name |
gender |
score |
1 |
1 |
小明 |
M |
90 |
2 |
1 |
小红 |
F |
95 |
3 |
1 |
小军 |
M |
88 |
4 |
1 |
小米 |
F |
73 |
5 |
2 |
小白 |
F |
81 |
6 |
2 |
小兵 |
M |
55 |
7 |
2 |
小林 |
M |
85 |
8 |
3 |
小新 |
F |
91 |
9 |
3 |
小王 |
M |
89 |
10 |
3 |
小丽 |
F |
88 |
和classes 表 |
|
|
|
|
id |
name |
1 |
一班 |
2 |
二班 |
3 |
三班 |
4 |
四班 |
INNER JOIN
返回两个表的交集部分
1
| SELECT * FROM students INNER JOIN classes ON students.id=classes.id
|
id |
class_id |
name |
gender |
score |
id |
name |
1 |
1 |
小明 |
M |
90 |
1 |
一班 |
2 |
1 |
小红 |
F |
95 |
2 |
二班 |
3 |
1 |
小军 |
M |
88 |
3 |
三班 |
4 |
1 |
小米 |
F |
73 |
4 |
四班 |
LEFT JOIN
把右表的部分追加到左表的后面,没有的那些字段值置为NULL
1
| SELECT * FROM students LEFT JOIN classes ON students.id=classes.id
|
id |
class_id |
name |
gender |
score |
id |
name |
1 |
1 |
小明 |
M |
90 |
1 |
一班 |
2 |
1 |
小红 |
F |
95 |
2 |
二班 |
3 |
1 |
小军 |
M |
88 |
3 |
三班 |
4 |
1 |
小米 |
F |
73 |
4 |
四班 |
5 |
2 |
小白 |
F |
81 |
NULL |
NULL |
6 |
2 |
小兵 |
M |
55 |
NULL |
NULL |
7 |
2 |
小林 |
M |
85 |
NULL |
NULL |
8 |
3 |
小新 |
F |
91 |
NULL |
NULL |
9 |
3 |
小王 |
M |
89 |
NULL |
NULL |
10 |
3 |
小丽 |
F |
88 |
NULL |
NULL |
RIGHT JOIN
把左表的部分追加到右表的后面,没有的那些字段值置为NULL
1
| SELECT * FROM students RIGHT JOIN classes ON students.id=classes.id
|
id |
class_id |
name |
gender |
score |
id |
name |
1 |
1 |
小明 |
M |
90 |
1 |
一班 |
2 |
1 |
小红 |
F |
95 |
2 |
二班 |
3 |
1 |
小军 |
M |
88 |
3 |
三班 |
4 |
1 |
小米 |
F |
73 |
4 |
四班 |
1
| SELECT * FROM classes OUTER JOIN students ON students.id=classes.id
|
id |
name |
id |
class_id |
name |
gender |
score |
1 |
一班 |
1 |
1 |
小明 |
M |
90 |
2 |
二班 |
2 |
1 |
小红 |
F |
95 |
3 |
三班 |
3 |
1 |
小军 |
M |
88 |
4 |
四班 |
4 |
1 |
小米 |
F |
73 |
NULL |
NULL |
5 |
2 |
小白 |
F |
81 |
NULL |
NULL |
6 |
2 |
小兵 |
M |
55 |
NULL |
NULL |
7 |
2 |
小林 |
M |
85 |
NULL |
NULL |
8 |
3 |
小新 |
F |
91 |
NULL |
NULL |
9 |
3 |
小王 |
M |
89 |
NULL |
NULL |
10 |
3 |
小丽 |
F |
88 |
OUTER JOIN
只要其中一个表中存在匹配,则返回行,没有的那些字段值置为NULL
。相当于返回两个表的交集
1
| SELECT * FROM students OUTER JOIN classes ON students.id=classes.id
|
id |
class_id |
name |
gender |
score |
id |
name |
1 |
1 |
小明 |
M |
90 |
1 |
一班 |
2 |
1 |
小红 |
F |
95 |
2 |
二班 |
3 |
1 |
小军 |
M |
88 |
3 |
三班 |
4 |
1 |
小米 |
F |
73 |
4 |
四班 |
5 |
2 |
小白 |
F |
81 |
NULL |
NULL |
6 |
2 |
小兵 |
M |
55 |
NULL |
NULL |
7 |
2 |
小林 |
M |
85 |
NULL |
NULL |
8 |
3 |
小新 |
F |
91 |
NULL |
NULL |
9 |
3 |
小王 |
M |
89 |
NULL |
NULL |
10 |
3 |
小丽 |
F |
88 |
NULL |
NULL |