Fork me on GitHub

SQL有多少种join方式

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

返回两个表的交集部分

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
LEFT JOIN

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

RIGHT JOIN

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。相当于返回两个表的交集

OUTER JOIN

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
您的支持将鼓励我继续创作!