軟體測試學習 之自連線(self join)

2021-09-12 06:53:54 字數 1948 閱讀 4316

自連線(self join)是sql語句中經常要用的連線方式,使用自連線可以將自身表的乙個映象當作另乙個表來對待,從而能夠得到一些特殊的資料。一般用於資料分類

自連線的例項(mysql,oracle,mssql等通用)

我們什麼時候應該使用自連線呢?我們來看下面的例子。

在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;

得到了如下結果:

工人	works for	老闆

adams works for james

allen works for tom

ford works for tom

james works for tom

kik works for james

smith works for ford

turner works for allen

例項講解2(oracle,mysql)

這裡我們注意到,tom這個人沒有出現在工人列裡面,是因為這個人是整個公司的老闆,他沒有經理。如果這時候我們希望這個人也出現在左側,即使他沒有老闆。

我們可以使用剛剛才介紹過的oracle中的外連線

例如:

-- oracle左連線寫法

select work.ename '工人',' works for',mgr.ename '老闆'

from emp work, emp mgr

where work.mgr = mgr.empno (+)

order by work.ename;

-- mysql左連線實現

select `work`.ename '工人','works for',mgr.ename '老闆'

from emp `work`

left join emp mgr on `work`.mgr = mgr.empno

order by `work`.ename;

得到結果:

工人	works for	老闆

adams works for james

allen works for tom

ford works for tom

james works for tom

kik works for james

smith works for ford

tom works for

turner works for allen

這是我們看到tom的右側是空白,也就是沒有老闆。

從這裡我們看到,當表中的某乙個欄位與這個表中另外欄位的相關時,我們可能用到自連線。

自連線

軟體測試學習 之 軟體測試流程

華為產品經理和一線人員與現網 移動各業務區 溝通,形成需求規格說明書華為將需求規格說明書下發到業務相關的外包公司 如筆者曾任職的中軟國際 專案經理在專案立項前1 2天,上傳專案組svn 需求宣講,一般是華為的乙個產品經理主持,講解使用者的需求重點,涉及到的功能點,以及上乙個版本的遺留問題等,之前彙總...

mysql內連線查詢之自連線

連線查詢 當查詢資料時,通過連線操作查詢出存放在多個表中的不同資料,當兩個或者多個表中存在相同意義的字段時,便可以通過這些欄位對不同的表進行連線查詢。自連線 如果在乙個連線查詢中,涉及的兩個表都是同乙個表,這種查詢稱為自連線查詢。自連線是一種特殊的內連線,它是指相互連線的表在物理上為同一張表,但可以...

軟體測試之 軟體測試方法

1 介紹測試方法 2 區分黑盒測試 灰盒測試和白盒測試 邏輯覆蓋測試 3 區分靜態測試 控制流分析 資料流分析 資訊流分析 同行評審 和動態測試 動態測試工具 4 了解手工測試和自動化測試。在介紹以上軟體測試方法時,需要先了解軟體產品的概念,軟體研發過程中產生的所有文件和 都可以稱之為軟體產品,同時...