SQL操作之:连接(JOIN)
目录
- 内连接
- 外连接
- 左连接
- 右连接
- 全连接
- 交叉连接
常见的连接类型包括内连接(
INNER JOIN
)、左连接(
LEFT JOIN
)、右连接(
RIGHT JOIN
)、全连接(
FULL JOIN
)和交叉连接(
CROSS JOIN
)。其中,左连接、右连接、全连接属于是外连接(
OUTER JOIN
)。
内连接
只有当两个表中存在满足连接条件的记录时,才会出现在结果集中。
SELECT students.student_name, grades.grade
FROM students
INNER JOIN grades ON students.student_id = grades.student_id;
外连接
左连接
左连接返回左表的所有记录,以及右表中匹配的记录。如果右表中没有匹配的记录,则用 NULL
填充。
SELECT students.student_name, grades.grade
FROM students
LEFT JOIN grades ON students.student_id = grades.student_id;
右连接
右连接返回右表的所有记录,以及左表中匹配的记录。如果左表中没有匹配的记录,则用 NULL
填充。
SELECT students.student_name, grades.grade
FROM students
RIGHT JOIN grades ON students.student_id = grades.student_id;
全连接
全连接返回左表和右表中的所有记录,无论是否匹配。不匹配的部分用 NULL
填充。结果集的大小通常是两个表的记录数之和,减去匹配的记录数(因为匹配的记录只出现一次)。
SELECT students.student_name, grades.grade
FROM students
FULL JOIN grades ON students.student_id = grades.student_id;
交叉连接
交叉连接返回左表和右表的笛卡尔积,即左表的每条记录与右表的每条记录进行组合。不基于任何条件,生成所有可能的组合。结果集的大小是左表记录数乘以右表记录数。
SELECT colors.color_name, shapes.shape_name
FROM colors
CROSS JOIN shapes;