詳解MySQL多表查詢
??多表查詢
??內(nèi)連接查詢
- 語(yǔ)法
-- 隱式內(nèi)連接 SELECT 字段列表 FROM 表1,表2… WHERE 條件; -- 顯示內(nèi)連接 SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 條件;
內(nèi)連接相當(dāng)于查詢 A B 交集數(shù)據(jù)

- 案例
- 隱式內(nèi)連接
SELECT * FROM emp, dept WHERE emp.dep_id = dept.did;
執(zhí)行上述語(yǔ)句結(jié)果如下:

- 查詢 emp的 name, gender,dept表的dname
SELECT emp. NAME, emp.gender, dept.dname FROM emp, dept WHERE emp.dep_id = dept.did;
執(zhí)行語(yǔ)句結(jié)果如下:

上面語(yǔ)句中使用表名指定字段所屬有點(diǎn)麻煩,sql也支持給表指別名,上述語(yǔ)句可以改進(jìn)為
SELECT t1. NAME, t1.gender, t2.dname FROM emp t1, dept t2 WHERE t1.dep_id = t2.did;
- 顯式內(nèi)連接
select * from emp inner join dept on emp.dep_id = dept.did; -- 上面語(yǔ)句中的inner可以省略,可以書寫為如下語(yǔ)句 select * from emp join dept on emp.dep_id = dept.did;
執(zhí)行結(jié)果如下:

??外連接查詢
- 語(yǔ)法
-- 左外連接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 條件; -- 右外連接 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 條件;
左外連接:相當(dāng)于查詢A表所有數(shù)據(jù)和交集部分?jǐn)?shù)據(jù)
右外連接:相當(dāng)于查詢B表所有數(shù)據(jù)和交集部分?jǐn)?shù)據(jù)

- 案例
- 查詢emp表所有數(shù)據(jù)和對(duì)應(yīng)的部門信息(左外連接)
select * from emp left join dept on emp.dep_id = dept.did;
執(zhí)行語(yǔ)句結(jié)果如下:

結(jié)果顯示查詢到了左表(emp)中所有的數(shù)據(jù)及兩張表能關(guān)聯(lián)的數(shù)據(jù)。
- 查詢dept表所有數(shù)據(jù)和對(duì)應(yīng)的員工信息(右外連接)
select * from emp right join dept on emp.dep_id = dept.did;
執(zhí)行語(yǔ)句結(jié)果如下:

結(jié)果顯示查詢到了右表(dept)中所有的數(shù)據(jù)及兩張表能關(guān)聯(lián)的數(shù)據(jù)。
要查詢出部門表中所有的數(shù)據(jù),也可以通過(guò)左外連接實(shí)現(xiàn),只需要將兩個(gè)表的位置進(jìn)行互換:
select * from dept left join emp on emp.dep_id = dept.did;
??子查詢
概念
查詢中嵌套查詢,稱嵌套查詢?yōu)樽硬樵儭?/p>
什么是查詢中嵌套查詢呢?我們通過(guò)一個(gè)例子來(lái)看:
需求:查詢工資高于豬八戒的員工信息。
來(lái)實(shí)現(xiàn)這個(gè)需求,我們就可以通過(guò)二步實(shí)現(xiàn),第一步:先查詢出來(lái) 豬八戒的工資
select salary from emp where name = '豬八戒'
第一步:查詢工資高于豬八戒的員工信息
select * from emp where salary > 3600;
第二步中的3600可以通過(guò)第一步的sql查詢出來(lái),所以將3600用第一步的sql語(yǔ)句進(jìn)行替換
select * from emp where salary > (select salary from emp where name = '豬八戒');
這就是查詢語(yǔ)句中嵌套查詢語(yǔ)句。
- 子查詢根據(jù)查詢結(jié)果不同,作用不同
- 子查詢語(yǔ)句結(jié)果是單行單列,子查詢語(yǔ)句作為條件值,使用 = != > < 等進(jìn)行條件判斷
- 子查詢語(yǔ)句結(jié)果是多行單列,子查詢語(yǔ)句作為條件值,使用 in 等關(guān)鍵字進(jìn)行條件判斷
- 子查詢語(yǔ)句結(jié)果是多行多列,子查詢語(yǔ)句作為虛擬表
- 案例
- 查詢 ‘財(cái)務(wù)部’ 和 ‘市場(chǎng)部’ 所有的員工信息
-- 查詢 '財(cái)務(wù)部' 或者 '市場(chǎng)部' 所有的員工的部門did select did from dept where dname = '財(cái)務(wù)部' or dname = '市場(chǎng)部'; select * from emp where dep_id in (select did from dept where dname = '財(cái)務(wù)部' or dname = '市場(chǎng)部');
- 查詢?nèi)肼毴掌谑?‘2011-11-11’ 之后的員工信息和部門信息
-- 查詢?nèi)肼毴掌谑?'2011-11-11' 之后的員工信息 select * from emp where join_date > '2011-11-11' ; -- 將上面語(yǔ)句的結(jié)果作為虛擬表和dept表進(jìn)行內(nèi)連接查詢 select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where t1.dep_id = dept.did;
最后說(shuō)一句
感謝大家的閱讀,文章通過(guò)網(wǎng)絡(luò)資源與自己的學(xué)習(xí)過(guò)程整理出來(lái),希望能幫助到大家。
才疏學(xué)淺,難免會(huì)有紕漏,如果你發(fā)現(xiàn)了錯(cuò)誤的地方,可以提出來(lái),我會(huì)對(duì)其加以修改。
到此這篇關(guān)于詳解MySQL多表查詢的文章就介紹到這了,更多相關(guān)MySQL多表查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql正則表達(dá)式(regexp和rlike)的搜索功能實(shí)例分析
這篇文章主要介紹了mysql正則表達(dá)式(regexp和rlike)的搜索功能,結(jié)合實(shí)例形式分析了mysql正則表達(dá)式使用regexp和rlike的搜索功能相關(guān)原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-12-12
MySQL深分頁(yè),limit 100000,10優(yōu)化方式
MySQL中深分頁(yè)查詢因需掃描大量數(shù)據(jù)行導(dǎo)致效率低下,優(yōu)化方法包括子查詢優(yōu)化、延遲關(guān)聯(lián)、標(biāo)簽記錄法和使用between...and...等,通過(guò)減少回表次數(shù)和范圍掃描提升查詢性能,覆蓋索引幫助減少搜索次數(shù),提升性能2024-10-10
給mysql數(shù)據(jù)庫(kù)的字段設(shè)默認(rèn)值方式
這篇文章主要介紹了給mysql數(shù)據(jù)庫(kù)的字段設(shè)默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
mysql5.7.19 解壓版安裝教程詳解(附送純凈破解中文版SQLYog)
Mysql5.7.19版本是今年新推出的版本,最近幾個(gè)版本的MySQL都不再是安裝版,都是解壓版了,大家在使用過(guò)程中遇到很多問(wèn)題,下面小編給大家?guī)?lái)了MySQL5.7.19 解壓版安裝教程詳解,感興趣的朋友一起看看吧2017-10-10
mysql的limit用法及邏輯分頁(yè)和物理分頁(yè)
本文主要介紹了mysql的limit用法及邏輯分頁(yè)和物理分頁(yè),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
MySQL數(shù)據(jù)庫(kù)INNODB表?yè)p壞修復(fù)處理過(guò)程分享
突然收到MySQL報(bào)警,從庫(kù)的數(shù)據(jù)庫(kù)掛了,一直在不停的重啟,打開錯(cuò)誤日志,發(fā)現(xiàn)有張表壞了。innodb表?yè)p壞不能通過(guò)repair table 等修復(fù)myisam的命令操作?,F(xiàn)在記錄下解決過(guò)程2013-08-08
Mysql系統(tǒng)變量與狀態(tài)變量詳細(xì)介紹
這篇文章主要介紹了Mysql系統(tǒng)變量與狀態(tài)變量詳細(xì)介紹,能夠在程序運(yùn)行過(guò)程中影響Mysql程序行為的變量稱之為系統(tǒng)變量,想了解更多相關(guān)內(nèi)容的小伙伴可以參考下面文章內(nèi)容2022-09-09

