首頁 > 資料庫 > SQL > 主體

一起聊聊SQL的表連接

WBOY
發布: 2022-06-15 11:55:28
轉載
2207 人瀏覽過

這篇文章為大家帶來了關於SQL的相關知識,其中主要介紹了關於表連接的相關內容,SQL Server中支援多種連接,包括內連接、左連接、右連接、交叉連接和全外連接,下面一起來看一下,希望對大家有幫助。

一起聊聊SQL的表連接

推薦學習:《SQL教程

#SQL的表連接

在關係資料庫中,數據分佈在多個邏輯表。想要獲得完整有意義的資料集,則需要使用連接來查詢這些表中的資料。 SQL Server中支援多種連接,包括內連接、左連接、右連接、交叉連接和全外連接。

一、內連接

內部連接子句用於查詢來自兩個或多個相關資料表的資料。 INNER JOIN 子句的語法:

SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p 
INNER JOIN production.categories c ON c.category_id = p.category_id
登入後複製

注意:要查詢的字段,必須要在字段的前面加上表名或表的別名,如:p.product_name
其中FROM後面的是主表,然後INNER JOIN 後面的表格是要連接的表。主表和連接表進行比較,查 找滿足的條件的所有行。連接謂詞的計算結果為true是,則將主表和連接表合併成新的結果集,如下圖所示:

一起聊聊SQL的表連接

內連接的多個表連接,如下所示:

SELECT p.product_name, p.list_price ,c.category_name, b.brand_nameFROM production.products p 
INNER JOIN production.categories c ON c.category_id = p.category_id 
INNER JOIN production.brands b ON b.brand_id = p.brand_id
登入後複製

二、左連接

在左連接中使用L​​EFT JOIN 子句用於查詢來自多個表的數據,它會傳回是左表中的所有行和右表中匹配行。若是右表中找不到匹配行,則使用NULL代替顯示,如圖所示:

一起聊聊SQL的表連接

#使用LEFT JOIN 語句進行連接:如下所示:

SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p 
LEFT JOIN production.categories c ON c.category_id = p.category_id
登入後複製

在上面的語法中FROM 後面的表是左表(production.products),而LEFT JOIN 後面緊接的右表(production.categories)。

三、右連結

在右邊連接中使用RIGHT JOIN子句來進行兩個資料表或多個資料表查詢。右查詢剛好與左查詢的是相反的,返回右表的所有行和左表的匹配行,若左表找不到匹配行,則返回NULL代替顯示,如圖所示:

一起聊聊SQL的表連接

#使用RIGHT JOIN 語句進行連接:如下所示:

SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p 
RIGHT JOIN production.categories c ON c.category_id = p.category_id
登入後複製

在上面的語法中FROM 後面的表是左表(production.products),而RIGHT JOIN 後面緊跟的右表(production.categories)。

四、交叉連接

CROSS JOIN 連接兩個或多個不相關的表。以下是兩個表的CROSS JOIN 的語法,兩種寫法:

SELECT T1.select_list 
FROM T1 CROSS JOIN T2;
登入後複製

SELECT T1.select_list 
FROM T1, T2;
登入後複製

CROSS JOIN 將第一個表(T1)中的每一行與第二個表( T2)中的每一行連接起來。換句話說,交叉連 接回兩個表中行的笛卡爾積。與INNER JOIN或LEFT JOIN不同,交叉連接不會在連接的表之間 建立關係。
假設 T1 表包含三行: 1 , 2 和 3 , T2 表包含三行: A , B 和 C 。 CROSS JOIN 從第一個 表(T1)取得一行,然後為第二個表(T2)中的每一行建立一個新行。然後它對 第一個 表(T1)中的 下一行執行相同操作,依此類推。在此圖中, CROSS JOIN 總共建立了 9 行。

五、自連接

自聯接用於將表連接到自身(同一個表)。它對於查詢分層資料或比較同一個表中的行很有用。
自聯接使用內連接或左連接子句。由於使用自聯接的查詢來引用同一個表,因此表別名用於為查詢 中的表分配不同的名稱。
注意:如果在不使用表別名的情況下在查詢中多次引用同一個表,則會發生錯誤。
範例:

SELECT t1.select_list 
FROM T1 t1INNER JOIN T1 t2 ON t1.category_id = t2.category_id
登入後複製

在INNER JOIN 這裡可以使用其他的子句,例如:LEFT JOIN ,RIGHT JOIN

六、全外連接

FULL OUTER JOIN當左表或右表中存在符合項目時,該指令將傳回所有行。如圖所示:

一起聊聊SQL的表連接

使用FULL OUTER JOIN 查詢pm.projects 表和pm.member 表中的資料:

SELECT m.name member, p.title project 
FROM pm.members m 
FULL OUTER JOIN pm.projects p ON p.id = m.project_id;
登入後複製

pm.projects 表數據:
一起聊聊SQL的表連接

pm.member 表格資料:

一起聊聊SQL的表連接

查詢結果:
一起聊聊SQL的表連接

推薦學習:《SQL教學

以上是一起聊聊SQL的表連接的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
sql
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!