轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2020-08-19 09:54:41.703|閱讀 438 次
概述:有時(shí)你可能需要獲取位于同一個(gè)表中的相關(guān)數(shù)據(jù)。為此,你可以使用一種特殊的聯(lián)接,稱為自聯(lián)接(Self Join)。在今天的文章中,我們將學(xué)習(xí)如何使用 Navicat Premium 作為數(shù)據(jù)庫(kù)客戶端編寫包含自聯(lián)接的查詢。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Navicat Premium是一個(gè)可連接多種數(shù)據(jù)庫(kù)的管理工具,它可以讓你以單一程序同時(shí)連接到MySQL、Oracle及PostgreSQL數(shù)據(jù)庫(kù),讓管理不同類型的數(shù)據(jù)庫(kù)更加的方便。
點(diǎn)擊下載Navicat Premium最新試用版
SQL - 自聯(lián)接有時(shí)你可能需要獲取位于同一個(gè)表中的相關(guān)數(shù)據(jù)。為此,你可以使用一種特殊的聯(lián)接,稱為自聯(lián)接(Self Join)。在今天的文章中,我們將學(xué)習(xí)如何使用 Navicat Premium 作為數(shù)據(jù)庫(kù)客戶端編寫包含自聯(lián)接的查詢。
語(yǔ)法自聯(lián)接的基本語(yǔ)法如下:
SELECT a.column_name, b.column_name... FROM table1 a, table1 b WHERE a.common_field = b.common_field;
除了通用字段的鏈接之外,WHERE 子句還可以根據(jù)你的特定要求包含其他表達(dá)式。
例子在 Sakila 示例數(shù)據(jù)庫(kù)中,有一個(gè) customer 表,其中包含與客戶相關(guān)的信息,例如他們的姓名,電子郵箱和地址。以下是 Navicat 表設(shè)計(jì)器中的列:
我們可以使用自聯(lián)接來(lái)檢索姓氏與其他客戶的名字相匹配的所有客戶。我們通過(guò)為 customer 表分配別名來(lái)實(shí)現(xiàn)這一目標(biāo)。別名允許我們將表與自身聯(lián)接,因?yàn)樗鼈優(yōu)楸硖峁┝藘蓚€(gè)唯一的名稱,這意味著我們可以當(dāng)它們是兩個(gè)不同的表進(jìn)行查詢。然后以 last_name 和 first_name 字段將它們聯(lián)接:
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 的自動(dòng)完成功能在編寫查詢時(shí)非常有用,因?yàn)樗兄诒苊馄磳戝e(cuò)誤并猜測(cè)列名。因此,它對(duì)于選擇字段特別有用:
運(yùn)行查詢會(huì)生成以下結(jié)果:
使用 INNER JOINN
將表與自身聯(lián)接的另一種方法是使用 INNER JOIN。如果你不確定如何做到這一點(diǎn),Navicat 可以幫助你!它提供了一個(gè)名為“查詢創(chuàng)建工具”的有用工具,用于直觀地構(gòu)建查詢。它允許你在不太了解 SQL 的情況下創(chuàng)建和編輯查詢。數(shù)據(jù)庫(kù)對(duì)象顯示在左側(cè)窗格中。而在右側(cè)窗格分為兩部分:上面的“圖表設(shè)計(jì)”窗格和下面的“語(yǔ)法”窗格。
我們只需將第一個(gè)表別名的 last_name 字段拖到第二個(gè)表別名的 first_name,查詢創(chuàng)建工具就會(huì)為我們生成聯(lián)接!
這是生成的 SQL 語(yǔ)句
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 ;
在今天的文章中,我們學(xué)習(xí)了如何使用Navicat Premium編寫包含自聯(lián)接的查詢。歡迎前往Navicat Premium下載試用
現(xiàn)Avicat Premium企業(yè)版限時(shí)優(yōu)惠最低僅售5004!點(diǎn)擊查看優(yōu)惠詳情或咨詢慧都客服獲取更多優(yōu)惠 !本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: