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 类型,以确保查询的效率和结果的正确性。

posted @ 2024-08-26 00:35  槑孒  阅读(136)  评论(0)    收藏  举报