轉帖|使用教程|編輯:鮑佳佳|2020-08-19 09:54:41.703|閱讀 438 次
概述:有時你可能需要獲取位于同一個表中的相關數據。為此,你可以使用一種特殊的聯接,稱為自聯接(Self Join)。在今天的文章中,我們將學習如何使用 Navicat Premium 作為數據庫客戶端編寫包含自聯接的查詢。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Navicat Premium是一個可連接多種數據庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL數據庫,讓管理不同類型的數據庫更加的方便。
SQL - 自聯接有時你可能需要獲取位于同一個表中的相關數據。為此,你可以使用一種特殊的聯接,稱為自聯接(Self Join)。在今天的文章中,我們將學習如何使用 Navicat Premium 作為數據庫客戶端編寫包含自聯接的查詢。
語法自聯接的基本語法如下:
SELECT a.column_name, b.column_name... FROM table1 a, table1 b WHERE a.common_field = b.common_field;
除了通用字段的鏈接之外,WHERE 子句還可以根據你的特定要求包含其他表達式。
例子在 Sakila 示例數據庫中,有一個 customer 表,其中包含與客戶相關的信息,例如他們的姓名,電子郵箱和地址。以下是 Navicat 表設計器中的列:
我們可以使用自聯接來檢索姓氏與其他客戶的名字相匹配的所有客戶。我們通過為 customer 表分配別名來實現這一目標。別名允許我們將表與自身聯接,因為它們為表提供了兩個唯一的名稱,這意味著我們可以當它們是兩個不同的表進行查詢。然后以 last_name 和 first_name 字段將它們聯接:
SELECT c1.customer_id as customer_1_id, c1.first_name as customer_1_first_name, c1.last_name as customer_1_last_name, c2.customer_id as customer_2_id, c2.first_name as customer_2_first_name, c2.last_name FROM customer c1, customer c2 WHERE c1.last_name = c2.first_name ORDER BY c1.last_name;
Navicat 的自動完成功能在編寫查詢時非常有用,因為它有助于避免拼寫錯誤并猜測列名。因此,它對于選擇字段特別有用:
運行查詢會生成以下結果:
使用 INNER JOINN
將表與自身聯接的另一種方法是使用 INNER JOIN。如果你不確定如何做到這一點,Navicat 可以幫助你!它提供了一個名為“查詢創建工具”的有用工具,用于直觀地構建查詢。它允許你在不太了解 SQL 的情況下創建和編輯查詢。數據庫對象顯示在左側窗格中。而在右側窗格分為兩部分:上面的“圖表設計”窗格和下面的“語法”窗格。
我們只需將第一個表別名的 last_name 字段拖到第二個表別名的 first_name,查詢創建工具就會為我們生成聯接!
這是生成的 SQL 語句
SELECT c1.customer_id AS customer_1_id, c1.first_name AS customer_1_first_name, c1.last_name AS customer_1_last_name, c2.customer_id AS customer_2_id, c2.first_name AS customer_2_first_name, c2.last_name FROM customer AS c1 INNER JOIN customer AS c2 ON c1.last_name = c2.first_name ORDER BY customer_1_last_name ASC ;
在今天的文章中,我們學習了如何使用Navicat Premium編寫包含自聯接的查詢。歡迎前往Navicat Premium下載試用
現Avicat Premium企業版限時優惠最低僅售5004!點擊查看優惠詳情或咨詢慧都客服獲取更多優惠 !本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: