內部連接與外部連接
內部聯接和外部聯接是數據庫查詢處理中使用的兩種SQL聯接方法。它們屬於連接子句家族(另外兩個是左連接和右連接)。但是,有一個Self-Join可以用於特殊情況。Join的目的是使用兩個表的公共值組合字段。這些聯接將數據庫中多個表中的記錄合併在一起。它創建的結果集可以另存為另一個表。
什麼是內部聯接?
最常用的SQL聯接操作是內部聯接。它可以被認為是應用程序中使用的默認聯接類型。內部聯接使用聯接謂詞組合兩個表。假設這兩個表是A和B,那麼連接謂詞將比較A和B的行,以找出滿足謂詞的所有對。將A表和B表中所有滿足條件的行的列值組合起來以創建結果。它可以看作是首先獲取所有記錄的交叉連接(笛卡爾積),然後只返回滿足連接謂詞的記錄。然而,在現實中,笛卡爾積是不計算的,因為它是非常低效的。而是使用哈希聯接或排序合併聯接。
什麼是外部聯接?
與內部聯接不同,外部聯接保留所有記錄,即使找不到匹配的記錄。這意味著外部聯接確實需要一個記錄來找到匹配的記錄,以便它出現在結果中。相反,它將返回所有記錄,但不匹配的記錄將具有空值。外部連接分為三個子類別。它們是左外聯接、右外聯接和全外聯接。這種區別是基於在找到不匹配的記錄時保留哪個表(左表、右表或兩個表)的行。左外部聯接(也稱為簡單的左聯接)保留左表的所有記錄。這意味著,即使匹配記錄數為零,結果表中仍有記錄,但B的所有列都將有空值。換句話說,左表中的所有值都將與右表中的匹配值一起返回(不匹配時返回空值)。如果左表中多行的值與右表中的一行匹配,則右表中的行將根據需要重複。右外部聯接與左外部聯接非常相似,但表的處理是受尊重的。這意味著結果將至少有一次右表的所有行具有匹配的左表值(對於不匹配的右表值,則為空值)。完全外部聯接比左外部聯接和右外部聯接更全面。它的結果是將左、右外部連接在一起的效果結合在一起。
內部聯接和外部聯接有什麼區別?