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