翻譯|使用教程|編輯:秦林|2022-10-17 11:26:17.227|閱讀 266 次
概述:本篇文章中將幾個外部聯接的示例,消除你對SQL外部聯接的誤解和困惑。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
外部聯接(Outer Join)是所有 SQL 聯接類型中最不為人知的。也許是因為與其他聯接類型相比,外部聯接的需求較少。無論如何,外部聯接本身并沒有什么奇特的。正如我們將在這篇文章中看到的幾個外部聯接的示例,應該足以消除你對它們的任何誤解和困惑。
本文將首先講述 Outer Join 語句的語法和用途,然后會有一些示例說明。
當左(表 A)或右(表 B)表記錄中存在匹配項時,OUTER JOIN(或 FULL OUTER JOIN)關鍵字會返回兩個聯接表的所有記錄。下面的 VEN 圖描述了潛在的匹配項和 OUTER JOIN 語法:
因此,FULL OUTER JOIN 會從返回兩個表中不匹配的行,以及兩個表中的匹配行。換句話說,無論兩個表的聯接字段(Clave)值是否匹配,查詢都會返回行。
還是一頭霧水?不用擔心,我們將在下一節中看看一些示例,就能一清二楚。
更復雜的枚舉可能包含其他類型;字符串是最常見的類型,但也支持更復雜的對象。以下是一個用于表示不同環境 URL 的枚舉(也是 Java):
在本教程中,我們將使用廣為人知的 Northwind 示例數據庫。
以下SQL語句選擇所有客戶和所有訂單:
SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CustomerName;
由 OUTER JOIN 查詢生成的結果集的特征之一是,你可能會在任一聯接列中看到 Null 值,因為聯接列可能出現在一個表中,但不會出現在另一個表中。在下面的屏幕截圖中,我們可以看到Navicat Premium 16中上述查詢及其結果:
當然,你不會在兩個表列中看到 Null,因為值必須至少出現在一個表中。值得注意的是,在 ContactName 列中出現 Null 是有問題的,因為這意味著訂單與現有客戶無關。這指出數據庫設計存在缺陷,很可能是缺少外鍵約束。
我們的第二個示例是從項目管理數據庫中獲取數據,即項目經理和項目。以下是 SQL 語句:
SELECT m.name member, p.title project FROM pm.members m FULL OUTER JOIN pm.projects p ON p.id = m.project_id;
同樣,我們可以看到 Null 值(至少一個 Null 值)
在這種情況下,結果表明 Jack Daniel 目前沒有項目。這是否構成問題將取決于該組織的具體業務。在任何給定時間,項目經理沒有項目或未分配項目可能是完全合理的。
希望今天的文章能夠幫助你了解外部聯接在查詢中的用途和用法。最后一件要注意的事:外部聯接可能會產生非常大的結果集,因此要謹慎使用它們,并加入篩選子句(例如 WHERE)以盡量減少返回的行數。
Navicat Premium是一個可連接多種數據庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL數據庫,讓管理不同類型的數據庫更加的方便。了解更多Navicat相關內容和資訊,歡迎訪問慧都網獲取。
數據庫管理工具交流群:765665608 歡迎進群交流討論
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn