翻譯|使用教程|編輯:秦林|2022-11-18 11:17:42.007|閱讀 231 次
概述:小編將通過本文給大家詳細講解 LEFT 和 RIGHT 聯接,以及當使用 INNER JOIN 組合它們時,如何變成 OUTER JOIN。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
前面的文章詳細介紹了 SELECT 查詢中的外部聯接。它是一種 JOIN 類型,可以從相關表中返回匹配和不匹配的行。但是,并非所有數據庫(DB)供應商都支持它,包括 MySQL。但是沒關系,因為可以通過組合其他三種 JOIN 類型(即 LEFT、INNER 和 RIGHT 連接)來模擬外部聯接。在本文中,我們將詳細了解 LEFT 和 RIGHT 聯接,以及當使用 INNER JOIN 組合它們時,如何變成 OUTER JOIN。
LEFT JOIN 返回左表中的所有行和右表中的匹配行。如果在右表中沒有找到匹配的行,則返回 NULL。以下是它的語法:
SELECT select_list FROM T1 LEFT JOIN T2 ON join_predicate;
下面的 VEN 圖說明了使用 LEFT JOIN 子句可以從兩個表 T1 和 T2 中獲取哪些數據:
RIGHT JOIN 返回右表中的所有行和左表中的匹配行。 如果在左表中沒有找到匹配的行,則返回 NULL。以下是它的語法:
SELECT select_list FROM T1 RIGHT JOIN T2 ON join_predicate;
下面的 VEN 圖說明了使用 RIGHT JOIN 子句可以從兩個表 T1 和 T2 中獲取哪些數據:
整個數據庫社區都知道 MySQL 不支持 FULL OUTER JOIN。這個缺陷的一個常見解決辦法是使用 UNION ALL 組合來自兩個表的 LEFT JOIN、INNER JOIN 和 RIGHT JOIN 的三個結果集,并將 join_column IS NULL條件添加到 LEFT 和 RIGHT 聯接。
為了示范如何模擬以上的外部聯接,我們將使用與上周「了解 SQL 外部聯接」文章中相同的項目管理數據庫編寫查詢,但這次是在 MySQL 中。
第一個查詢將返回僅在左表中找到的行。以下的查詢配合使用 LEFT 聯接和 WHERE 子句來實現此效果,該子句指定右表中的公共(聯接)列為 NULL:
第二個查詢將返回僅在右表中找到的行。為此,我們將配合使用 RIGHT 聯接和 WHERE 子句,該子句指定左表中的公共(聯接)列為空:
若要查找出現在兩個表中的記錄,我們可以使用標準(INNER)JOIN,如下所示:
當使用 UNION ALL 組合這三個獨立的查詢時,會產生與 OUTER JOIN 相同的結果:
在本文中,我們學習了更多有關 LEFT 和 RIGHT 聯接的知識,以及當使用 INNER JOIN 組合它們時,如何變成 OUTER JOIN。和上周一樣,有一件要注意的事情。當與 ORDER BY 和/或 LIMIT 查詢一起使用時,這種方法在查詢大型表時可能效率很低,因為它使用文件排序(filesort)。在這種情況下,你可能需要采用另一種方法。
Navicat Premium是一個可連接多種數據庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL等數據庫,讓管理不同類型的數據庫更加的方便。了解更多Navicat內容,歡迎在線咨詢或者私信我獲取正版試用版及報價。
數據庫管理工具交流群:7645665608 歡迎進群交流討論
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn