SQL | JOIN 类型使用介绍
SQL JOIN 类型
1. INNER JOIN
- 定义:返回两个表中满足连接条件的交集部分,即仅返回两表中的匹配记录。
- 适用场景:
- 只关心两个表中都有的匹配记录。
- 数据关系明确,需要过滤掉没有对应关系的记录。
- 示例:
SELECT employees.name, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.id;
2. LEFT JOIN (或 LEFT OUTER JOIN)
- 定义:返回左表的所有记录及右表中与之匹配的记录,如果右表中没有匹配的记录,则返回 NULL。
- 适用场景:
- 需要返回左表中的所有记录,即使右表中没有匹配项。
- 主表记录必须显示,但关联表可能没有对应记录。
- 示例:
SELECT employees.name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.id;
3. RIGHT JOIN (或 RIGHT OUTER JOIN)
- 定义:返回右表的所有记录及左表中与之匹配的记录,如果左表中没有匹配的记录,则返回 NULL。
- 适用场景:
- 需要返回右表中的所有记录,即使左表中没有匹配项。
- 右表记录必须显示,但左表可能没有对应记录。
- 示例:
SELECT employees.name, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.id;
4. FULL JOIN (或 FULL OUTER JOIN)
- 定义:返回两个表中的所有记录,无论是否满足连接条件,未匹配的部分用 NULL 填充。
- 适用场景:
- 需要返回两个表的所有记录,无论是否匹配。
- 用于合并两个表的数据集,不丢失任何一方的数据。
- 示例:
SELECT employees.name, departments.department_name FROM employees FULL JOIN departments ON employees.department_id = departments.id;
5. CROSS JOIN
- 定义:返回两个表的笛卡尔积,即每个左表记录与右表的每个记录组合。
- 适用场景:
- 生成所有可能的组合。
- 用于计算所有可能的配对,如测试或报告生成。
- 示例:
SELECT products.name, categories.category_name FROM products CROSS JOIN categories;
6. SELF JOIN
- 定义:表与其自身进行 JOIN 操作。
- 适用场景:
- 将表中的记录与同一表中的其他记录进行比较。
- 处理层级关系或自关联数据。
- 示例:
SELECT e1.name AS Employee, e2.name AS Manager FROM employees e1 INNER JOIN employees e2 ON e1.manager_id = e2.id;
7. NATURAL JOIN
- 定义:自动根据两个表中同名列进行匹配,无需指定连接条件。
- 适用场景:
- 当两个表之间的连接条件是基于同名列时。
- 简化查询语句,但容易引发不确定性。
- 示例:
SELECT * FROM employees NATURAL JOIN departments;
总结
- INNER JOIN:适用于获取两个表的交集,数据关系明确的场景。
- LEFT JOIN:适用于需要保留左表数据的情况,即使右表中没有匹配。
- RIGHT JOIN:适用于需要保留右表数据的情况,即使左表中没有匹配。
- FULL JOIN:适用于需要保留两表所有记录的情况,无论匹配与否。
- CROSS JOIN:适用于生成两个表的所有组合的场景。
- SELF JOIN:用于表内数据的自关联情况,如层级关系。
- NATURAL JOIN:适用于同名列自动匹配的简单情况,但需注意引发的不确定性。
根据实际业务需求和数据关系,选择合适的 JOIN 类型,以确保查询的效率和结果的正确性。

浙公网安备 33010602011771号