在SQL中,不同类型的JOIN用于合并两张表的数据。以下是这些JOIN的解释和示例:
- INNER JOIN: 仅返回两张表中匹配的记录。
- LEFT JOIN (或 LEFT OUTER JOIN): 返回左表中的所有记录,即使右表中没有匹配的记录。
- RIGHT JOIN (或 RIGHT OUTER JOIN): 返回右表中的所有记录,即使左表中没有匹配的记录。
- JOIN: 通常是INNER JOIN的简写,仅返回两张表中匹配的记录。
示例数据
假设我们有两张表:students
和courses
。
students
表
student_id | student_name |
---|---|
1 | Alice |
2 | Bob |
3 | Charlie |
courses
表
course_id | course_name | student_id |
---|---|---|
101 | Math | 1 |
102 | Science | 1 |
103 | History | 2 |
104 | Geography | NULL |
INNER JOIN 示例
SELECT s.student_name, c.course_name
FROM students s
INNER JOIN courses c ON s.student_id = c.student_id;
结果:
student_name | course_name |
---|---|
Alice | Math |
Alice | Science |
Bob | History |
LEFT JOIN 示例
SELECT s.student_name, c.course_name
FROM students s
LEFT JOIN courses c ON s.student_id = c.student_id;
结果:
student_name | course_name |
---|---|
Alice | Math |
Alice | Science |
Bob | History |
Charlie | NULL |
RIGHT JOIN 示例
SELECT s.student_name, c.course_name
FROM students s
RIGHT JOIN courses c ON s.student_id = c.student_id;
结果:
student_name | course_name |
---|---|
Alice | Math |
Alice | Science |
Bob | History |
NULL | Geography |
JOIN 示例
SELECT s.student_name, c.course_name
FROM students s
JOIN courses c ON s.student_id = c.student_id;
结果:
student_name | course_name |
---|---|
Alice | Math |
Alice | Science |
Bob | History |
这个JOIN
实际上等同于INNER JOIN
,因为默认情况下,JOIN
就是INNER JOIN
。
总结
- INNER JOIN: 只返回匹配的记录。
- LEFT JOIN: 返回左表中的所有记录,以及匹配的右表记录,若无匹配则返回NULL。
- RIGHT JOIN: 返回右表中的所有记录,以及匹配的左表记录,若无匹配则返回NULL。
- JOIN: 等同于
INNER JOIN
。