溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL中JOIN連接的基本用法有哪些

發(fā)布時(shí)間:2022-06-02 13:49:12 來(lái)源:億速云 閱讀:151 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“MySQL中JOIN連接的基本用法有哪些”,在日常操作中,相信很多人在MySQL中JOIN連接的基本用法有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”MySQL中JOIN連接的基本用法有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

join流程詳解

join 是指 將兩個(gè)表連接起來(lái),兩個(gè)表分別為 驅(qū)動(dòng)表 和 被驅(qū)動(dòng)表。

我們拿下面的這個(gè)sql舉例,

select t1.id,t2.id  from t1 inner join t2 on t1.id = t2.id  where t1.id > 10;

t1和t2 都對(duì) id 建立了索引,我們假設(shè) t1 是驅(qū)動(dòng)表,t2是被驅(qū)動(dòng)表。

join流程如下:

1、MySQL每次從t1中讀取一行滿足過(guò)濾條件t1.id>10的記錄,如果有索引的話,就利用索引快速定位到表t1中符合t1.id>10的記錄。如果沒(méi)有索引的話,就從頭到尾遍歷,慢慢的查出表t1中符合t1.id>10的記錄。

2、當(dāng)從t1中讀取到一條記錄r1后,就根據(jù)連接的條件,也就是 on關(guān)鍵字后的條件,去t2中對(duì)應(yīng)的t2中的記錄,將t1的記錄和t2的記錄組合返回給客戶端.

具體的說(shuō)就是,當(dāng)從t1中得到一條記錄r1的時(shí)候,需要根據(jù)連接條件 t1.id = t2.id,也就是去t2中查詢是否存在記錄r2 ,其中r2.id = r1.id。
也就是執(zhí)行 select t2.id from t2 where t2.id = r1.id

如果有t2的id有索引的話,那么查詢速度是很快的,否則就只能全盤掃描了。

3、就這樣,依次的讀取t1中符合條件的記錄,然后查詢t2,直到t1中的記錄讀取完畢

從上述流程可以看出,join的大致過(guò)程就是從驅(qū)動(dòng)表中挨個(gè)讀取符合條件的記錄,然后根據(jù)連接條件到被驅(qū)動(dòng)表中找出符合條件的記錄,將其組合到一起返回給客戶端。

JOIN用于連表查詢,主要有5種用法。下面分別演示這5種用法

隨便建2張表,結(jié)構(gòu)如下

MySQL中JOIN連接的基本用法有哪些

MySQL中JOIN連接的基本用法有哪些

 字段col1用來(lái)使兩張表有一個(gè)同名字段的(但其實(shí)沒(méi)什么用,因?yàn)椴樵儣l件都需要用ON來(lái)指定,這里只是說(shuō)明一下如果有相同的字段名也沒(méi)什么影響)

一、笛卡爾積:CROSS JOIN

CROSS JOIN使兩張表的所有字段直接進(jìn)行笛卡爾積,假設(shè)表1有m條數(shù)據(jù),表2有n條數(shù)據(jù),則結(jié)果數(shù)量為m*n條

SELECT * FROM tab1 CROSS JOIN tab2

結(jié)果

MySQL中JOIN連接的基本用法有哪些

二、內(nèi)連接:INNER JOIN

內(nèi)連接需要用ON來(lái)指定兩張表需要比較的字段,最終結(jié)果只顯示滿足條件的數(shù)據(jù)

SELECT * FROM tab1 INNER JOIN tab2 ON tab1.id1 = tab2.id2

 結(jié)果

MySQL中JOIN連接的基本用法有哪些

注意到內(nèi)連接只把滿足ON條件的數(shù)據(jù)相連接,與笛卡爾積不同

三、左連接:LEFT JOIN

左連接可以看做在內(nèi)連接的基礎(chǔ)上,把左表中不滿足ON條件的數(shù)據(jù)也顯示出來(lái),但結(jié)果中的右表部分中的數(shù)據(jù)為NULL

SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.id1 = tab2.id2

結(jié)果

MySQL中JOIN連接的基本用法有哪些

四、右連接:RIGHT JOIN

右連接就是與左連接完全相反

SELECT * FROM tab1 RIGHT JOIN tab2 ON tab1.id1 = tab2.id2

結(jié)果

MySQL中JOIN連接的基本用法有哪些

五、全連接:OUTER JOIN

全連接就是左連接和右連接的并集,但是MySQL中并不支持全連接的寫法

SELECT * FROM tab1 OUTER JOIN tab2 ON tab1.id1 = tab2.id2

不過(guò)可以用UNION聯(lián)合左連接和右連接的結(jié)果來(lái)代替

SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.id1 = tab2.id2
UNION
SELECT * FROM tab1 RIGHT JOIN tab2 ON tab1.id1 = tab2.id2

結(jié)果

MySQL中JOIN連接的基本用法有哪些

到此,關(guān)于“MySQL中JOIN連接的基本用法有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI