SQL語言 自連線

2021-06-22 09:18:01 字數 1246 閱讀 8422

自連線意思就是表與其自身進行連線。雖然自連線並不是必須的,可以通過其他方式來完成,但是在某些情況下,使用自連線就比較方便。比如一張員工資訊表,這張表上有該員工的基本資訊,還有指明了他的上司的id號。但是同時他的上司也是員工,在這張表上也有他的資訊。如果我們需要顯示出所有員工的姓名和他上司的姓名,雖然我們可以通過其他方式,比如使用子查詢來完成這一任務,但是無疑使用自連線可能是最好的辦法。比如下面這張表:

員工號碼

員工姓名

上司號碼

001張三

003002

李四005

003王五

009004

趙六003

005吳七

010006

周八005

007胡九 

003008

陳十010

009楊二

010010劉一

現在我們要查詢出每個員工的姓名以及他上司的姓名,如果不使用自連線那麼我們就可以用下面的方式來完成該查詢

select name 員工姓名

,(select name from employee mg where ep.managerid = mg.id) 上司姓名 

from employee ep

查詢結果:

員工姓名

上司姓名

張三王五

李四吳七

王五楊二 

趙六王五

吳七劉一

周八吳七

胡九王五

陳十劉一

楊二劉一劉一

在這個查詢語句中,使用了乙個子查詢來完成對上司姓名的查詢。

如果使用自連線。那麼結構會感覺清晰許多,如:

select ep.name 員工姓名,mg.name 上司姓名 

from employee ep 

left join employee mg on ep.managerid = mg.id

這裡除了使用自連線外還使用了左外連線,因為『劉一』這個員工是所有人的上司,並且他沒有其他的上司,也就是說他是老總了。如果用內連線就會把這行記錄過濾掉,因為沒有和他匹配的上司姓名。使用左外連線就可以避免這一情況。

查詢結果:

員工姓名

上司姓名

胡九王五

趙六王五

張三 王五

周八吳七

李四 吳七

王五楊二

楊二劉一

陳十劉一

吳七劉一劉一

查詢結果都是一樣的,只是最後顯示出來的順序不一樣。

SQL自連線查詢

問題 表testcolor title color sign a 紅 111 b 紅 222 a 綠 333 c 紅 444 轉檢視 title 紅 綠 a 111 333 b 222 null c 444 null 解答 declare sql nvarchar 1000 set sql sele...

SQL自連線實戰

自連線 資料表與自身進行連線。從乙個包含欄目id 欄目名稱和父欄目id的表中查詢父欄目名稱和其他子欄目名稱。將一張表分為父表和子表 父表categoryid categoryname 資訊科技 軟體開發 美術設計 子表categoryid pidcategoryname 資料庫web開發 ps技術 ...

SQL高階(二)自連線

通常sql在不同的表間進行連線運算,如內連線 外連線 交叉連線等,但是也可以在相同的表進行自連線運算。使用場景 問題描述 分別查詢出指定表中可重排列 排列 組合的結果資料 product name 商品名稱 price 蘋果50 橘子100 香蕉80 統計結果 可重排列 name 1 name 2 ...