SQL | JOIN 型別使用介紹

槑孒發表於2024-08-26

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 型別,以確保查詢的效率和結果的正確性。

相關文章