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