INNER JOIN
聯結資料表
在關係資料庫中,數據經常會組織成多個數據表,以將備援降至最低,並增強數據完整性。 這種設計方法稱為正規化,可避免在不同位置重複相同的資訊。 不過,這表示有用的資訊通常會分散到多個數據表。
聯結是彌合此差距的基本 SQL 作業,可讓您結合兩個或多個數據表的數據列,並在單一統一的結果集中擷取相關數據。 基本上,聯結可讓您查詢以邏輯方式連接但實際分隔的資訊。 它們可藉由根據數據表之間一或多個通用數據行中找到的值來識別和比對數據列,藉此達成此組合。 這些通用數據行通常做為一個數據表中主鍵與另一個數據表中外鍵之間的連結,以建立資料庫架構中定義的關聯性。
注意:主鍵是數據表中每個記錄的唯一標識符,可確保此數據行中沒有任何兩個數據列具有相同的值。 另一方面,外鍵是某個數據表中的一個欄,用來參考另一個數據表中的主鍵,藉此連結兩個數據表。
聯結有多個「類型」(INNER、LEFT、RIGHT、FULL OUTER、NATURAL),每個聯結的設計方式略有不同,用來結合數據表。 它們會根據聯結數據表中是否存在或缺少相符值,來控制結果集中包含哪些數據列。
INNER JOIN
INNER JOIN是最常見的 SQL 聯結類型之一。 它會根據指定共用數據行中相符值的條件,結合多個數據表中的數據列。
執行INNER JOIN時,只有符合這兩個資料表條件的資料列會包含在結果集中,有效地篩選掉任何不相符的數據。 因此,INNER JOIN 很適合用來擷取資料表之間的連線明確定義的相關資訊,例如客戶訂單或員工指派。
SELECT orders.order_id, customers.customer_name, employees.first_name, employees.last_name
FROM sales.orders AS orders
INNER JOIN sales.customers AS customers ON orders.customer_id = customers.customer_id
INNER JOIN sales.employees AS employees ON orders.employee_id = employees.employee_id;
提供的查詢使用多個INNER JOIN作業來擷取統一的結果集,其中包含orders、customers和employees的詳細信息。
它在customer_id表格中將orders與customer_id表格中相應的customers匹配,並將employee_id表格中的orders與employee_id表格中的employees匹配。 因此,查詢會輸出每個訂單的標識碼,以及涉及的客戶和員工名稱。