mysql中各種常見join連表查詢實(shí)例總結(jié)
本文實(shí)例講述了mysql中各種常見join連表查詢。分享給大家供大家參考,具體如下:
通常我們需要連接多個(gè)表查詢數(shù)據(jù),以獲取想要的結(jié)果。
一、連接可以分為三類:
(1) 內(nèi)連接:join,inner join
(2) 外連接:left join,left outer join,right join,right outer join,union,union all
(3) 交叉連接:cross join
二、準(zhǔn)備需要演示的表:
CREATE TABLE `a` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `a_name` varchar(32) DEFAULT '' COMMENT 'a表名稱', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `b` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `a_id` int(11) DEFAULT '0' COMMENT 'a表ID', `b_name` varchar(32) DEFAULT '' COMMENT 'b表名稱', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
a表與b表的數(shù)據(jù)如圖中所示:
三、內(nèi)連接inner join或join
select * from a inner join b on a.id = b.a_id; select * from a join b on a.id = b.a_id; select * from a, b where a.id = b.a_id;
結(jié)果如下:
內(nèi)連接可以理解為,兩個(gè)表中同時(shí)滿足某條件的數(shù)據(jù)記錄組合。也就是表A和表B中滿足條件a.id = b.a_id的所有記錄。
當(dāng)表A中的一條記錄對(duì)應(yīng)表B中的多條記錄時(shí),會(huì)以重復(fù)的方式對(duì)應(yīng)多條表B記錄出現(xiàn)在結(jié)果集中。
當(dāng)表B中的一條記錄對(duì)應(yīng)表A中的多條記錄時(shí),會(huì)以重復(fù)的方式對(duì)應(yīng)多條表A記錄出現(xiàn)在結(jié)果集中。
四、外連接left join或right join
(1) 左外連接
select * from a left join b on a.id = b.a_id; select * from a left outer join b on a.id = b.a_id;
左外連接,會(huì)以左邊的表A為主表,返回所有行,即使右表B中沒有匹配的行。
如果左邊的表A在右表B中找不到一條記錄,則返回表A所有記錄并且表B相應(yīng)的字段設(shè)為null。
如果左邊的表A在右表B中找到多條記錄,則以相同表A記錄和不同表B記錄多條顯示在結(jié)果集中。
這種情況下,其實(shí)是把表A中所有記錄都查詢出來了,包括不滿足條件的記錄。
如果我們只想查出表A中滿足條件的,或是不滿足條件的,該怎么查?
select * from a left join b on a.id = b.a_id where b.a_id is not null; select * from a left outer join b on a.id = b.a_id where b.a_id is not null;
上面的語(yǔ)句查詢的,就是表A中滿足條件的。
select * from a left join b on a.id = b.a_id where b.a_id is null; select * from a left outer join b on a.id = b.a_id where b.a_id is null;
上面的語(yǔ)句查詢的,就是表A中不滿足條件的。
(2) 右外連接
select * from a right join b on a.id = b.a_id; select * from a right outer join b on a.id = b.a_id;
右外連接其實(shí)跟左外連接一樣,區(qū)別在于 主表的確定,兩者之間可以相互轉(zhuǎn)換。
右外連接的描述基本與左外連接相同,這里就不過多描述了。
(3) 全連接full join
mysql并不支持全連接,不過有相應(yīng)的替代方案,就是left join union right join 來代替。
select * from a left join b on a.id = b.a_id union select * from a right join b on a.id = b.a_id;
全連接會(huì)從表A和表B中返回所有的行,如果表A中的行在表B中沒有匹配,或是表B中的行在表A中沒有匹配,這些行都會(huì)顯示,不存在的字段以null補(bǔ)充。
union會(huì)把其中重復(fù)的行合并。
這種情況下,是把表A和表B中滿足條件和不滿足條件的記錄都顯示出來了。
如果只想顯示所有不滿足條件的記錄,則通過如下語(yǔ)句:
select * from a left join b on a.id = b.a_id where b.a_id is null union select * from a right join b on a.id = b.a_id where a.id is null;
如果只想顯示所有滿足條件的記錄,則通過如下語(yǔ)句:
select * from a left join b on a.id = b.a_id where b.a_id is not null union select * from a right join b on a.id = b.a_id where a.id is not null;
五、交叉連接
交叉連接實(shí)際上就是表A與表B的笛卡爾乘積。
select * from a cross join b; select * from a, b;
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過程技巧大全》及《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。
相關(guān)文章
MySQL清空數(shù)據(jù)表的方法實(shí)例與分析
這篇文章給大家詳細(xì)介紹了MySQL清空數(shù)據(jù)表的方法,文中給出了實(shí)例代碼,對(duì)大家學(xué)習(xí)使用MySQL具有一定的參考借鑒價(jià)值,有需要的可以參考借鑒,下面來一起看看吧。2016-10-10MySQL Shell import_table數(shù)據(jù)導(dǎo)入的實(shí)現(xiàn)
這篇文章主要介紹了MySQL Shell import_table數(shù)據(jù)導(dǎo)入的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08mysql之臟讀、不可重復(fù)讀、幻讀的區(qū)別及說明
這篇文章主要介紹了mysql之臟讀、不可重復(fù)讀、幻讀的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07深入了解MySQL中分區(qū)表的原理與企業(yè)級(jí)實(shí)戰(zhàn)
本文詳細(xì)講解什么是分區(qū)表,分區(qū)表增刪改查的工作原理以及分區(qū)表的實(shí)戰(zhàn),分區(qū)表的場(chǎng)景有哪些,哪些場(chǎng)景不建議用分區(qū)表,并列舉出六點(diǎn)使用分區(qū)表的誤區(qū),需要的可以參考一下2022-11-11Mysql的列修改成行并顯示數(shù)據(jù)的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了Mysql的列修改成行并顯示數(shù)據(jù)的簡(jiǎn)單實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10詳解Mysql數(shù)據(jù)庫(kù)date, datetime類型設(shè)置0000-00-00默認(rèn)值(default)報(bào)錯(cuò)問題
這篇文章主要介紹了詳解Mysql數(shù)據(jù)庫(kù)date, datetime類型設(shè)置0000-00-00默認(rèn)值(default)報(bào)錯(cuò)問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01mysql安裝報(bào)錯(cuò)unknown?variable?‘mysqlx_port=0.0‘簡(jiǎn)單解決過程
這篇文章主要給大家介紹了關(guān)于mysql安裝報(bào)錯(cuò)unknown?variable?‘mysqlx_port=0.0‘的解決過程,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-08-08