天天看點

mysql表分區多表連結查詢_資料庫多表連接配接查詢

學習資料庫查詢的時候對多表連接配接查詢的有些概念還比較模糊。而連接配接查詢是在資料庫查詢操作的時候肯定要用到的。對于此概念

我用通俗一些的語言和例子來進行講解。這個例子是我講課的時候經常采用的例子。

首先我們做兩張表:員工資訊表和部門資訊表,在此,表的建立隻為講述連接配接的概念,是以字段非常的簡單

EmployeeTB(員工資訊表):

employeeid employeename deptid

0001  張三  01

0002  李四  01

0003  王五  02

0004  趙六  02

0005  鄭七  NULL

DeptTB(部門資訊表)

deptid  deptname

01  技術部

02  市場部

03  工程部

我們現在需要進行連接配接查詢,連接配接兩張表檢索資料。分别檢索員工資訊表的員工編号、員工姓名和部門資訊表中的部門名稱。

顯然,兩個表的連接配接條件是 員工表的部門編号=部門表的部門編号

注意:鄭七不屬于任何部門(新來的員工,還沒有配置設定到任何的部門),而工程部不存在任何的員工(比如是一個新成立的部門,還沒有員工)

1、内連接配接查詢

我們可以有兩種方式,這兩種是等效的

一種是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e,DeptTB AS d WHERE e.deptid=d.deptid

另外一個是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e INNER JOIN DeptTB AS d ON e.deptid=d.deptid

檢索的結果都是:

employeeid employeename deptname

0001  張三  技術部

0002  李四  技術部

0003  王五  市場部

0004  趙六  市場部

而“鄭七”和“工程部”的資訊是不會檢索出來。因為采用内連接配接計算的時候必須要保證連接配接的條件e.deptid=d.deptid比對,結果才會被檢索出來。當我們連接配接兩張檢索資料的時候,檢索的方式是首先逐行掃描“員工資訊表”中的記錄,然後根據連接配接條件來決定此記錄是否被檢索。比如對于張三,這條記錄的deptid是01(部門編号),它在部門表中能找到和它比對的編号01,而編号01的部門名稱(deptname)是“技術部”是以張三這條記錄會被檢索,最終的結果肯定是:

0001  張三  技術部

同樣,李四、王五、趙六也能。但是鄭七的部門編号是NULL,它在部門資訊表中找不到比對的項(因為部門資訊表中不存在部門編号為NULL的部門),是以鄭七不會被檢索。

同理,沒有任何人員的部門編号為03,是以工程部的記錄也不會被檢索

2、左外聯結

但是有些情況下,我們需要知道所有員工的資訊,即使他不屬于任何部門。這樣我們就可以采用外連接配接,在這裡為左外連接配接,也就是連接配接中的左表的表中的記錄,無論能不能在右表中找到比對的項,都要檢索,如果沒有比對的項目,那麼右表中的字段值為NULL(空),在這裡就代表,此員工不屬于任何部門。

檢索語句為:

SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e LEFT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid

檢索的結果都是:

employeeid employeename deptname

0001  張三  技術部

0002  李四  技術部

0003  王五  市場部

0004  趙六  市場部

0005  鄭七  NULL

但是在這裡,工程部同樣不會被檢索,因為,deptname是在連接配接的右邊的表中,“工程部”在左表中不存在任何的記錄,是以不會被檢索。這裡關注的是“連接配接中的左邊的表”

3、右外連接配接

有時,我們需要知道,全部部門的資訊,即使它沒有任何的員工。在我們的查詢中部門表在連接配接的右邊,如果我們想知道右邊表中的所有記錄資訊,那麼就可以采用右外連接配接,如果此記錄在左邊的表中找不到比對項,則相應字段(employeeid,employeename)為NULL

檢索語句為:

SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e RIGHT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid

檢索的結果都是:

employeeid employeename deptname

0001  張三  技術部

0002  李四  技術部

0003  王五  市場部

0004  趙六  市場部

NULL  NULL  工程部

但在這裡,鄭七是不會被檢索了,因為它在右表中找不到比對項,這裡關注的是“連接配接中的右邊的表”

4、完全外連接配接

如果我們想知道所有的記錄呢?無論員工有沒有部門,部門有沒有員工,我們都需要檢索。這裡就可以使用完全外連接配接。關注連接配接中的兩部分。如果沒有部門,部門為空,沒有員工,員工資訊為空。

檢索語句為:

SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e FULL OUTER JOIN DeptTB AS d ON e.deptid=d.deptid

檢索的結果都是:

employeeid employeename deptname

0001  張三  技術部

0002  李四  技術部

0003  王五  市場部

0004  趙六  市場部

0005  鄭七  NULL

NULL  NULL  工程部