多表聯合查詢

關聯數據庫字典表的多表聯合查詢

inner join…on 自動鏈接html

須要用到表的全部信息時,能夠用如下兩種方法數據庫

1)    left join…on… 左鏈接 (以左爲準,右邊沒有NULL代替)post

2)    right join…on… 右鏈接(以右爲準,左邊沒有NULL代替)學習

3)    full join …on… 徹底外鏈接 spa

  

insert into employee (id,position,xueli,emplyee_name) values(1,1,4,'楊忠宇'); 設計

就是說這個員工  是高中學歷  職位是項目經理htm

 怎樣才能把他的我的信息查找出來的?blog

 select   a.emplyee_name,b.item_value,c.item_valueit

from   employee   a 
join   my_dictionary   b   on   b.item_type = '職位'   and   a.position = b.id 
join   my_dictionary   c   on   c.item_type = '學歷'   and   a.xueli=c.id 
where a.id=1;
io

 

 

若是有的員工沒有學歷 那麼就用 left

 

select   a.emplyee_name,b.item_value,c.item_value
from   employee   a 
left outer join   my_dictionary   b   on   b.item_type = '職位'  and a.position=b.id
left outer join   my_dictionary   c   on   c.item_type = '學歷'   and   a.xueli=c.id

 

 

 

可是目前對 設計數據庫字典表 好處還不是很瞭解。節省空間嗎?

 

=================================================================

 

只需掌握  隱式內鏈接  左外鏈接   右外鏈接  便可 

 

學習數據庫查詢的時候對多表鏈接查詢的有些概念還比較模糊。而鏈接查詢是在數據庫查詢操做的時候確定要用到的。對於此概念 

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

首先咱們作兩張表:員工信息表和部門信息表,在此,表的創建只爲講述鏈接的概念,因此字段很是的簡單 

 

EmployeeTB(員工信息表): 

 

employeeid employeename       deptid 

0001          張三               01 

0002          李四               01 

0003          王五               02 

0004          趙六               02 

0005          鄭七              NULL 

 

DeptTB(部門信息表) 

deptid  deptname 

01      技術部 

02      市場部 

03      工程部 

 

咱們如今須要進行鏈接查詢,鏈接兩張表檢索數據。分別檢索員工信息表的員工編號、員工姓名和部門信息表中的部門名稱。 

顯然,兩個表的鏈接條件是 員工表的部門編號=部門表的部門編號 

 

注意:鄭七不屬於任何部門(新來的員工,尚未分配到任何的部門),而工程部不存在任何的員工(好比是一個新成立的部門,

尚未員工) 

 

一、內( 自)鏈接查詢 

咱們能夠有兩種方式,這兩種是等效的 

一種是: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  張三  技術部 

 

一樣,李4、王5、趙六也能。可是鄭七的部門編號是NULL,它在部門信息表中找不到匹配的項(由於部門信息表中不存在部門編號爲NULL的部門),因此鄭七不會被檢索。 

同理,沒有任何人員的部門編號爲03,因此工程部的記錄也不會被檢索 

 

二、左外聯結 

可是有些狀況下,咱們須要知道全部員工的信息,即便他不屬於任何部門。這樣咱們就能夠採用外鏈接,在這裏爲左外鏈接,也就是鏈接中的左表的表中的記錄,不管能不能在右表中找到匹配的項,都要檢索,若是沒有匹配的項目,那麼右表中的字段值爲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是在鏈接的右邊的表中,「工程部」在左表中不存在任何的記錄,因此不會被檢索。這裏關注的是「鏈接中的左邊的表」 

 

 

三、右外鏈接 

有時,咱們須要知道,所有部門的信息,即便它沒有任何的員工。在咱們的查詢中部門表在鏈接的右邊,若是咱們想知道右邊表中的全部記錄信息,那麼就能夠採用右外鏈接,若是此記錄在左邊的表中找不到匹配項,則相應字段(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  工程部 

 

但在這裏,鄭七是不會被檢索了,由於它在右表中找不到匹配項,這裏關注的是「鏈接中的右邊的表」 

 

四、徹底外鏈接 

若是咱們想知道全部的記錄呢?不管員工有沒有部門,部門有沒有員工,咱們都須要檢索。這裏就可使用徹底外鏈接。關注鏈接中的兩部分。若是沒有部門,部門爲空,沒有員工,員工信息爲空。 

檢索語句爲: 

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  工程部

相關文章
相關標籤/搜索