溫馨提示×

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

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

MySQL系列之如何理解多表連接查詢

發(fā)布時(shí)間:2021-10-26 14:32:34 來(lái)源:億速云 閱讀:242 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容主要講解“MySQL系列之如何理解多表連接查詢”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“MySQL系列之如何理解多表連接查詢”吧!

目錄
  • 1.笛卡爾積現(xiàn)象

  • 2.連接查詢知識(shí)點(diǎn)概括

    • 1)什么是連接查詢?

    • 2)連接查詢的分類

  • 3.內(nèi)連接講解

    • 1)等值連接:最大特點(diǎn)是,連接條件為等量關(guān)系。

    • 2)sql92語(yǔ)法和sql99語(yǔ)法的區(qū)別。

    • 3)非等值連接:最大特點(diǎn)是,連接條件為非等量關(guān)系。

    • 4)自連接:最大特點(diǎn)是,一張表看作兩張表。

  • 4.外連接講解

    • 1)什么是外連接,和內(nèi)連接有什么區(qū)別?

    • 2)外連接的分類

1.笛卡爾積現(xiàn)象

MySQL系列之如何理解多表連接查詢

結(jié)果如下:

MySQL系列之如何理解多表連接查詢

分析如下:
??上述結(jié)果肯定是不對(duì)的,左表中每一個(gè)人都有4個(gè)男朋友,仔細(xì)觀察這4條記錄,正好是左表每一條記錄和右表一一匹配后的結(jié)果。
??笛卡爾積現(xiàn)象產(chǎn)生的原因:兩張表沒(méi)有有效的連接條件。既然你沒(méi)有連接條件,本表中的第一行肯定是能和另外表中的所有行進(jìn)行一一匹配,同理,本表中的第二行肯定是能和另外表中的所有行進(jìn)行一一匹配,以此類推,本表中的最后一行m也可以和另外表中的所有行進(jìn)行一一匹配。若另外一張表有n行,那么最后顯示的行數(shù),肯定就是m*n行了。
??如果不想產(chǎn)生笛卡爾積現(xiàn)象,就需要添加有效的表連接條件。拿上述例子來(lái)說(shuō),左表boyfriend_id只有和右邊id相等時(shí),才代表她們的男朋友。

添加表連接條件后:

MySQL系列之如何理解多表連接查詢

可以看到,笛卡爾積最終產(chǎn)生的記錄數(shù)是兩張表中各自數(shù)據(jù)的乘積,當(dāng)沒(méi)有使用連接查詢的時(shí)候,如果兩張表中數(shù)據(jù)特別大的時(shí)候,將會(huì)撐爆你的內(nèi)存,那是很可怕的,因此我們要學(xué)會(huì)使用連接查詢。

2.連接查詢知識(shí)點(diǎn)概括

1)什么是連接查詢?

在實(shí)際開(kāi)發(fā)中,大多數(shù)的情況下都不是從單表中查詢數(shù)據(jù),一般都是多張表聯(lián)合查詢?nèi)〕鲎罱K的結(jié)果。也就是說(shuō):實(shí)際業(yè)務(wù)中也是一個(gè)業(yè)務(wù)由多個(gè)表構(gòu)成,不同的信息存儲(chǔ)在不同的表中,如果我們想要獲取的信息來(lái)自多張表,此時(shí)你就需要使用連接查詢。

2)連接查詢的分類

① 按年代分類

MySQL中不支持全連接(full join),一般使用的是union關(guān)鍵字完成全連接的功能。MySQL中交叉連接是cross join,用的較少,我們也不用關(guān)心。

sq192標(biāo)準(zhǔn):僅支持內(nèi)連接;sq199標(biāo)準(zhǔn)【推薦】:僅僅支持內(nèi)連接+外連接(僅支持左外和右外)+交叉連接; ② 按功能分類 內(nèi)連接:等值連接、非等值連接、自連接;外連接:左外連接、右外連接、全外連接(full join);

3.內(nèi)連接講解

原始數(shù)據(jù)如下:

MySQL系列之如何理解多表連接查詢

1)等值連接:最大特點(diǎn)是,連接條件為等量關(guān)系。

習(xí)題:查詢員工名和對(duì)應(yīng)的部門(mén)名;

sql92語(yǔ)法如下:(太老了,一般不用,看到了知道什么意思就行。)

MySQL系列之如何理解多表連接查詢

sql99語(yǔ)法:(常用的)

MySQL系列之如何理解多表連接查詢

2)sql92語(yǔ)法和sql99語(yǔ)法的區(qū)別。

 -- sql92語(yǔ)法
 select ename,dname
 from emp,dept
 where emp.deptno=dept.deptno;
 
-- sql99語(yǔ)法
select ename,dname
from emp (inner)join dept
on emp.deptno=dept.deptno;

-- sql92語(yǔ)法和sql99語(yǔ)法的區(qū)別
1)逗號(hào)(",")換成(inner)join;
2)where換成on;
注:inner可以省略,寫(xiě)上inner可以增加代碼的可讀性。

--sql99語(yǔ)法的優(yōu)勢(shì)
表連接和后面的where條件篩選,分離開(kāi)來(lái)。
對(duì)于sql92語(yǔ)法來(lái)說(shuō),表連接用的是where,where篩選用的也是where,混淆在一起不清不楚。

3)非等值連接:最大特點(diǎn)是,連接條件為非等量關(guān)系。

MySQL系列之如何理解多表連接查詢

習(xí)題:找出每個(gè)員工的工資等級(jí),要求顯示員工名、工資、工資等級(jí)。

MySQL系列之如何理解多表連接查詢

4)自連接:最大特點(diǎn)是,一張表看作兩張表。

什么叫做一張表看作兩張表呢?也就是說(shuō),自連接是同一張表之間的連接,連接條件就是這張表中的不同字段。

人和機(jī)器的最大不同,就在于人有判斷能力,你知道區(qū)分使用一張表的不同字段,但是機(jī)器不知道,都是同一張表,字段名也都是相同的。那么,機(jī)器怎么才能區(qū)分哪個(gè)表是哪個(gè)表(對(duì)于同一張表來(lái)說(shuō))。

這就需要起別名了。對(duì)于同一張表來(lái)說(shuō),我給它取兩個(gè)名字,一個(gè)是A,一個(gè)是B,這樣機(jī)器就能很好的區(qū)分了。當(dāng)取A表中的字段,就是"A.字段",取B表中的字段,就是"B.字段"。

習(xí)題:找出每個(gè)員工的上級(jí)領(lǐng)導(dǎo),要求顯示員工名和對(duì)應(yīng)的領(lǐng)導(dǎo)名。

MySQL系列之如何理解多表連接查詢

4.外連接講解

原始數(shù)據(jù)如下:

MySQL系列之如何理解多表連接查詢

1)什么是外連接,和內(nèi)連接有什么區(qū)別?

① 內(nèi)連接

假設(shè)A和B表進(jìn)行連接,使用內(nèi)連接的話,凡是A表和B表能夠匹配上的記錄,就會(huì)查詢出來(lái),這就是內(nèi)連接。AB兩張表沒(méi)有主副之分,兩張表是平等的。

② 外連接

假設(shè)A和B表進(jìn)行連接,使用外連接的話,AB兩張表中有一張表是主表,一張表是副表,主要查詢主表中的數(shù)據(jù),捎帶著查詢副表。當(dāng)副表中的數(shù)據(jù)沒(méi)有和主表中的數(shù)據(jù)匹配上,副表自動(dòng)模擬出NULL與之匹配。

外連接最重要的特點(diǎn)是:主表的數(shù)據(jù),無(wú)條件的全部查詢出來(lái)。

2)外連接的分類

左連接有右連接的寫(xiě)法,右連接也會(huì)有對(duì)應(yīng)的左連接的寫(xiě)法。因此,我們?cè)趯W(xué)習(xí)MySQL的過(guò)程中,沒(méi)有必要既學(xué)習(xí)左連接又學(xué)習(xí)右連接。

左外連接(左連接):表示左邊的這張表是主表。右外連接(右連接):表示右邊的這張表是主表。 3)案例分析

MySQL系列之如何理解多表連接查詢

習(xí)題:找出哪個(gè)部門(mén)沒(méi)有員工?

MySQL系列之如何理解多表連接查詢

到此,相信大家對(duì)“MySQL系列之如何理解多表連接查詢”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向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