SQL JOIN 操作是数据库查询中非常重要的一部分,它允许你结合两个或多个表中的行。以下是各种 JOIN 类型的详细讲解和代码示例:
1. INNER JOIN(内连接)
INNER JOIN
返回两个表中匹配的行。只有当两个表中都有匹配的行时,结果中才会显示这些行。
语法:
SELECT columns
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
代码示例:
假设有两个表,Students
和 Scores
,它们通过 student_id
相关联。
SELECT Students.name, Scores.score
FROM Students
INNER JOIN Scores
ON Students.student_id = Scores.student_id;
2. LEFT JOIN(左连接)
LEFT JOIN
返回左表(第一个表)的所有行,即使右表(第二个表)中没有匹配的行。
语法:
SELECT columns
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
代码示例:
SELECT Students.name, Scores.score
FROM Students
LEFT JOIN Scores
ON Students.student_id = Scores.student_id;
3. RIGHT JOIN(右连接)
RIGHT JOIN
返回右表(第二个表)的所有行,即使左表(第一个表)中没有匹配的行。
语法:
SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
代码示例:
SELECT Students.name, Scores.score
FROM Students
RIGHT JOIN Scores
ON Students.student_id = Scores.student_id;
4. FULL OUTER JOIN(全外连接)
FULL OUTER JOIN
返回两个表中的所有行,无论它们是否匹配。如果某一侧没有匹配的行,结果将包含 NULL 值。
语法:
SELECT columns
FROM table1
FULL OUTER JOIN table2
ON table1.common_field = table2.common_field;
代码示例:
SELECT Students.name, Scores.score
FROM Students
FULL OUTER JOIN Scores
ON Students.student_id = Scores.student_id;
注意事项
INNER JOIN
是最常用的 JOIN 类型,它只返回两个表中都有的行。LEFT JOIN
和RIGHT JOIN
允许你从任一侧获取所有行,即使另一侧没有匹配的行。FULL OUTER JOIN
会返回所有行,无论是否有匹配,这可能会导致结果集中包含 NULL 值。