4 回答

TA貢獻1966條經驗 獲得超4個贊
連接用于組合來自兩個表的數據,結果是一個新的臨時表。連接是基于稱為謂詞的東西執行的,謂詞指定了用于執行連接的條件。內連接和外連接之間的區別在于內連接將僅返回基于連接謂詞實際匹配的行。讓我們考慮員工和位置表:
內連接: - 內連接通過基于連接謂詞組合兩個表( Employee和 Location)的列值來創建新的結果表。該查詢將 Employee的每一行與 Location的每一行進行比較,以查找滿足join-predicate的所有行對。當通過匹配非NULL值來滿足連接謂詞時, Employee和 Location的每個匹配行對的列值將合并到結果行中。以下是內連接的SQL的外觀:
select * from employee inner join location on employee.empID = location.empIDORselect * from employee, location where employee.empID = location.empID
現在,這是運行SQL的結果:
外連接: - 外連接不要求兩個連接表中的每個記錄都有匹配的記錄。即使沒有其他匹配記錄,聯接表也會保留每條記錄。外連接進一步細分為左外連接和右外連接,具體取決于保留哪個表的行(左或右)。
左外連接: - 表的左外連接(或簡稱左連接)的結果 Employee和 Location始終包含“左”表(Employee)的所有記錄,即使連接條件未找到任何匹配的記錄“右”表(位置)。以下是使用上表的左外連接的SQL的樣子:
select * from employee left outer join location on employee.empID = location.empID;//Use of outer keyword is optional
現在,運行此SQL的結果如下:
右外連接: - 右外連接(或右連接)非常類似于左外連接,除非對表的處理相反?!坝摇北恚?em>位置)中的每一行將至少出現在連接表中一次。如果從“左”表(不匹配的行員工)存在,NULL就會出現在列的員工對于那些在沒有匹配的記錄位置。這就是SQL的樣子:
select * from employee right outer join location on employee.empID = location.empID;//Use of outer keyword is optional
使用上面的表格,我們可以顯示右外連接的結果集是什么樣的:
完全外部聯接: - 完全外部聯接或完全聯接是通過在聯接的結果中包含不匹配的行來保留不匹配的信息,使用完整的外部聯接。它包括來自兩個表的所有行,無論另一個表是否具有匹配值。

TA貢獻1816條經驗 獲得超4個贊
簡單來說:
一個內部聯接僅檢索匹配的行。
而一個外連接檢索一個表匹配的行和其他表中的所有行....結果取決于你使用哪一種:
左:右表中匹配的行和左表中的所有行
右:左表中匹配的行和右表中的所有行或
完整:所有表中的所有行。是否有匹配并不重要
添加回答
舉報