主頁(yè) > 知識(shí)庫(kù) > mysql中各種常見(jiàn)join連表查詢(xún)實(shí)例總結(jié)

mysql中各種常見(jiàn)join連表查詢(xún)實(shí)例總結(jié)

熱門(mén)標(biāo)簽:上海市三維地圖標(biāo)注 鄭州網(wǎng)絡(luò)外呼系統(tǒng)價(jià)錢(qián) 博樂(lè)電銷(xiāo)機(jī)器人 機(jī)器人打電銷(xiāo)電話 電話機(jī)器人是電腦呼號(hào)嗎 400電話到哪辦理優(yōu)惠 云南大數(shù)據(jù)外呼系統(tǒng) 怎么更改高德地圖標(biāo)注 南寧外呼系統(tǒng)招商

本文實(shí)例講述了mysql中各種常見(jiàn)join連表查詢(xún)。分享給大家供大家參考,具體如下:

通常我們需要連接多個(gè)表查詢(xún)數(shù)據(jù),以獲取想要的結(jié)果。

一、連接可以分為三類(lèi):

  (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表名稱(chēng)',
 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表名稱(chēng)',
 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中沒(méi)有匹配的行。

如果左邊的表A在右表B中找不到一條記錄,則返回表A所有記錄并且表B相應(yīng)的字段設(shè)為null。

如果左邊的表A在右表B中找到多條記錄,則以相同表A記錄和不同表B記錄多條顯示在結(jié)果集中。

這種情況下,其實(shí)是把表A中所有記錄都查詢(xún)出來(lái)了,包括不滿足條件的記錄。

如果我們只想查出表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ǔ)句查詢(xún)的,就是表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ǔ)句查詢(xún)的,就是表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)換。

右外連接的描述基本與左外連接相同,這里就不過(guò)多描述了。

  (3) 全連接full join

mysql并不支持全連接,不過(guò)有相應(yīng)的替代方案,就是left join union right join 來(lái)代替。

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中沒(méi)有匹配,或是表B中的行在表A中沒(méi)有匹配,這些行都會(huì)顯示,不存在的字段以null補(bǔ)充。

union會(huì)把其中重復(fù)的行合并。

這種情況下,是把表A和表B中滿足條件和不滿足條件的記錄都顯示出來(lái)了。

如果只想顯示所有不滿足條件的記錄,則通過(guò)如下語(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;

如果只想顯示所有滿足條件的記錄,則通過(guò)如下語(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)容感興趣的讀者可查看本站專(zhuān)題:《MySQL查詢(xún)技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過(guò)程技巧大全》及《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》

希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。

您可能感興趣的文章:
  • MYSQL使用inner join 進(jìn)行 查詢(xún)/刪除/修改示例
  • MySQL查詢(xún)優(yōu)化:連接查詢(xún)排序limit(join、order by、limit語(yǔ)句)介紹
  • MySQL優(yōu)化之使用連接(join)代替子查詢(xún)
  • mysql多個(gè)left join連接查詢(xún)用法分析
  • mysql使用from與join兩表查詢(xún)的區(qū)別總結(jié)
  • MySQL中(JOIN/ORDER BY)語(yǔ)句的查詢(xún)過(guò)程及優(yōu)化方法
  • MySQL利用profile分析慢sql詳解(group left join效率高于子查詢(xún))
  • Mysql連接join查詢(xún)?cè)碇R(shí)點(diǎn)
  • MySQL聯(lián)表查詢(xún)基本操作之left-join常見(jiàn)的坑
  • mysql高效查詢(xún)left join和group by(加索引)

標(biāo)簽:秦皇島 寧夏 白銀 定西 益陽(yáng) 澳門(mén) 杭州 恩施

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql中各種常見(jiàn)join連表查詢(xún)實(shí)例總結(jié)》,本文關(guān)鍵詞  mysql,中,各種,常見(jiàn),join,連表,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql中各種常見(jiàn)join連表查詢(xún)實(shí)例總結(jié)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于mysql中各種常見(jiàn)join連表查詢(xún)實(shí)例總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章