自連線

自連線(self join)是SQL語句中經常要用的連線方式,使用自連線可以將自身表的一個鏡像當作另一個表來對待,從而能夠得到一些特殊的數據。

基本介紹

  • 中文名:自連線
  • 外文名:self join
  • 出處SQL語句
  • 所屬學科:計算機
連線的實例
我們什麼時候應該使用自連線呢?我們來看下面的例子。
在oracle的scott的schema中有一個表是emp
在emp中的每一個員工都有自己的mgr(經理),並且每一個經理自身也是公司的員工,自身也有自己的經理。下面我們需要將每一個員工自己的名字和經理的名字都找出來。這時候我們該怎么做呢?
如果我們有兩張這樣的表分別叫worker和mgr,那么我們就很好寫SQL語句
Select worker.name,
Mgr.name
From worker,mgr
Where worker.mgr = mgr.id;
但現在我們只有一張表。你也許說我們現在再建一張表,把同樣的數據拷貝過去不就可以了嗎?是的,這樣可以,但我們不會採用,因為這樣就會很麻煩,而且數據嚴重冗餘等等很多弊端。
我們有更好的方法,那就是自連線
自連線的本意就是將一張表看成多張表來做連線。我們可以這樣來寫SQL語句
select work.ename “工人”,’ works for’,mgr.ename “老闆”
from emp work, emp mgr
where work.mgr = mgr.empno
order by work.ename;
得到了如下結果:
工人 ‘WORKSFOR’ 老闆
——————– ——————– ——————–
ADAMS works for SCOTT
ALLEN works for BLAKE
BLAKE works for KING
CLARK works for KING
FORD works for JONES
JAMES works for BLAKE
JONES works for KING
MARTIN works for BLAKE
MILLER works for CLARK
SCOTT works for JONES
SMITH works for FORD
TURNER works for BLAKE
WARD works for BLAKE
實例講解
這裡我們注意到,King這個人沒有出現在工人列裡面,是因為這個人是整個公司的老闆,他沒有經理。如果這時候我們希望king這個人也出現在左側,即使他沒有老闆。
我們可以使用剛剛才介紹過的oracle中外連線
例如:
select work.ename “工人”,’ works for’,mgr.ename “老闆”
from emp work, emp mgr
where work.mgr = mgr.empno (+)
order by work.ename;
得到結果:
工人 ‘WORKSFOR’ 老闆
——————– ——————– ———-
ADAMS works for SCOTT
ALLEN works for BLAKE
BLAKE works for KING
CLARK works for KING
FORD works for JONES
JAMES works for BLAKE
JONES works for KING
KING works for
MARTIN works for BLAKE
MILLER works for CLARK
SCOTT works for JONES
SMITH works for FORD
TURNER works for BLAKE
WARD works for BLAKE
這是我們看到king的右側是空白,也就是沒有老闆。
從這裡我們看到,當表中的某一個欄位與這個表中另外欄位的相關時,我們可能用到自連線

相關詞條

熱門詞條

聯絡我們