Skip to content

SQL FULL JOIN

SQL FULL JOIN 是一种连接类型,它返回两个表中的所有记录。如果其中一个表中没有匹配的记录,则返回 NULL。

语法

sql
SELECT column_name(s)
FROM table1
FULL JOIN table2
ON table1.column_name = table2.column_name;

注意事项

  • MySQL 不支持 FULL JOIN:MySQL 数据库不直接支持 FULL JOIN 操作,但可以使用 UNION 操作来模拟 FULL JOIN。
  • SQL Server 和 PostgreSQL 支持 FULL JOIN:SQL Server 和 PostgreSQL 等数据库系统支持 FULL JOIN 操作。

示例

假设我们有以下两个表:

students 表

idnameagegrade
1张三18高三
2李四17高二
3王五19高三
4赵六16高一
5钱七18高三

scores 表

idstudent_idsubjectscore
11数学90
21语文85
32数学95
42语文88
53数学80
66数学75
76语文82

示例 1:基本 FULL JOIN

查询所有学生和所有成绩,匹配的显示对应数据,不匹配的显示 NULL:

sql
SELECT students.id, students.name, scores.subject, scores.score
FROM students
FULL JOIN scores ON students.id = scores.student_id;

结果:

idnamesubjectscore
1张三数学90
1张三语文85
2李四数学95
2李四语文88
3王五数学80
4赵六NULLNULL
5钱七NULLNULL
NULLNULL数学75
NULLNULL语文82

示例 2:在 MySQL 中模拟 FULL JOIN

由于 MySQL 不支持 FULL JOIN,我们可以使用 LEFT JOIN 和 RIGHT JOIN 的 UNION 来模拟:

sql
SELECT students.id, students.name, scores.subject, scores.score
FROM students
LEFT JOIN scores ON students.id = scores.student_id
UNION
SELECT students.id, students.name, scores.subject, scores.score
FROM students
RIGHT JOIN scores ON students.id = scores.student_id
WHERE students.id IS NULL;

结果与示例 1 相同。

注意事项

  1. NULL 值:当其中一个表中没有匹配的记录时,对应的列会返回 NULL。

  2. 性能考虑:对于大型表,FULL JOIN 可能会影响查询性能,因为它需要处理两个表中的所有记录。

  3. 使用场景:FULL JOIN 通常用于需要同时查看两个表中所有记录的场景,例如比较两个表的数据差异。

小结

SQL FULL JOIN 是一种连接类型,它返回两个表中的所有记录。当需要查询两个表中的所有记录,无论它们是否匹配时,FULL JOIN 非常有用。需要注意的是,MySQL 数据库不直接支持 FULL JOIN 操作,但可以使用 UNION 操作来模拟。