IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁數(shù)據(jù)庫(kù)MYSQL → 實(shí)例講解MySQL連接查詢

實(shí)例講解MySQL連接查詢

時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(1)

MySQL連接查詢相信大家都有所了解,連接查詢是在數(shù)據(jù)庫(kù)查詢操作的時(shí)候肯定要用到的,下面就為您介紹MySQL連接查詢的用法,供您參考學(xué)習(xí)。

首先我們做兩張表:?jiǎn)T工信息表和部門信息表,在此,表的建立只為講述連接的概念,所以字段非常的簡(jiǎn)單
EmployeeTB(員工信息表):

employeeid employeename deptid
0001 張三 01
0002 李四 01
0003 王五 02
0004 趙六 02
0005 鄭七 NULL

DeptTB(部門信息表)
deptid deptname
01 技術(shù)部
02 市場(chǎng)部
03 工程部

我們現(xiàn)在需要進(jìn)行連接查詢,連接兩張表檢索數(shù)據(jù)。分別檢索員工信息表的員工編號(hào)、員工姓名和部門信息表中的部門名稱。
顯然,兩個(gè)表的連接條件是 員工表的部門編號(hào)=部門表的部門編號(hào)
注意:鄭七不屬于任何部門(新來的員工,還沒有分配到任何的部門),而工程部不存在任何的員工(比如是一個(gè)新成立的部門,還沒有員工)

MySQL連接查詢:

1、內(nèi)連接查詢
我們可以有兩種方式,這兩種是等效的
一種是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e,DeptTB AS d WHERE e.deptid=d.deptid
另外一個(gè)是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e INNER JOIN DeptTB AS d ON e.deptid=d.deptid
檢索的結(jié)果都是:

employeeid employeename deptname
0001 張三 技術(shù)部
0002 李四 技術(shù)部
0003 王五 市場(chǎng)部
0004 趙六 市場(chǎng)部

而"鄭七"和"工程部"的信息是不會(huì)檢索出來。因?yàn)椴捎脙?nèi)連接計(jì)算的時(shí)候必須要保證連接的條件e.deptid=d.deptid匹配,結(jié)果才會(huì)被檢索出來。當(dāng)我們連接兩張檢索數(shù)據(jù)的時(shí)候,檢索的方式是首先逐行掃描"員工信息表"中的記錄,然后根據(jù)連接條件來決定此記錄是否被檢索。比如對(duì)于張三,這條記錄的deptid是01(部門編號(hào)),它在部門表中能找到和它匹配的編號(hào)01,而編號(hào)01的部門名稱(deptname)是"技術(shù)部"所以張三這條記錄會(huì)被檢索,最終的結(jié)果肯定是:

0001 張三 技術(shù)部

同樣,李四、王五、趙六也能。但是鄭七的部門編號(hào)是NULL,它在部門信息表中找不到匹配的項(xiàng)(因?yàn)椴块T信息表中不存在部門編號(hào)為NULL的部門),所以鄭七不會(huì)被檢索。
同理,沒有任何人員的部門編號(hào)為03,所以工程部的記錄也不會(huì)被檢索

2、左外聯(lián)結(jié)
但是有些情況下,我們需要知道所有員工的信息,即使他不屬于任何部門。這樣我們就可以采用外連接,在這里為左外連接,也就是連接中的左表的表中的記錄,無論能不能在右表中找到匹配的項(xiàng),都要檢索,如果沒有匹配的項(xiàng)目,那么右表中的字段值為NULL(空),在這里就代表,此員工不屬于任何部門。
檢索語句為:
SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e LEFT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid
檢索的結(jié)果都是:

employeeid employeename deptname
0001 張三 技術(shù)部
0002 李四 技術(shù)部
0003 王五 市場(chǎng)部
0004 趙六 市場(chǎng)部
0005 鄭七 NULL

但是在這里,工程部同樣不會(huì)被檢索,因?yàn)?,deptname是在連接的右邊的表中,"工程部"在左表中不存在任何的記錄,所以不會(huì)被檢索。這里關(guān)注的是"連接中的左邊的表"

3、右外連接
有時(shí),我們需要知道,全部部門的信息,即使它沒有任何的員工。在我們的查詢中部門表在連接的右邊,如果我們想知道右邊表中的所有記錄信息,那么就可以采用右外連接,如果此記錄在左邊的表中找不到匹配項(xiàng),則相應(yīng)字段(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
檢索的結(jié)果都是:

employeeid employeename deptname
0001 張三 技術(shù)部
0002 李四 技術(shù)部
0003 王五 市場(chǎng)部
0004 趙六 市場(chǎng)部
NULL NULL 工程部

但在這里,鄭七是不會(huì)被檢索了,因?yàn)樗谟冶碇姓也坏狡ヅ漤?xiàng),這里關(guān)注的是"連接中的右邊的表"

4、完全外連接
如果我們想知道所有的記錄呢?無論員工有沒有部門,部門有沒有員工,我們都需要檢索。這里就可以使用完全外連接。關(guān)注連接中的兩部分。如果沒有部門,部門為空,沒有員工,員工信息為空。
檢索語句為:
SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e FULL OUTER JOIN DeptTB AS d ON e.deptid=d.deptid
檢索的結(jié)果都是:

employeeid employeename deptname
0001 張三 技術(shù)部
0002 李四 技術(shù)部
0003 王五 市場(chǎng)部
0004 趙六 市場(chǎng)部
0005 鄭七 NULL
NULL NULL 工程部
?

關(guān)鍵詞標(biāo)簽:MySQL

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 Xbox Game Pass Xbox Game Pass 10款MySQL數(shù)據(jù)庫(kù)客戶端圖形界面管理工具推薦 10款MySQL數(shù)據(jù)庫(kù)客戶端圖形界面管理工具推薦 MySQL常用維護(hù)管理工具 MySQL常用維護(hù)管理工具 MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié) MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié)

相關(guān)下載

    人氣排行 10款MySQL數(shù)據(jù)庫(kù)客戶端圖形界面管理工具推薦 MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié) Mysql 1045錯(cuò)誤解決辦法 MySQL服務(wù)器進(jìn)程CPU占用100%解決辦法 MySQL導(dǎo)出導(dǎo)入命令的用例 MySQL連接字符串的實(shí)際操作步驟匯總 MySQL無法啟動(dòng)、無法停止各種解決方法總結(jié) 三種常用的MySQL建表語句