哎呦喂,今天咱們來(lái)說(shuō)一下SQL里的一個(gè)重要關(guān)鍵字——LEFT JOIN(左外連接)??赡苡行┬』锇閷?duì)這個(gè)概念不是很清楚,那么咱們先來(lái)介紹一下相關(guān)的知識(shí)。
在數(shù)據(jù)庫(kù)中,我們經(jīng)常需要對(duì)不同的表進(jìn)行關(guān)聯(lián)操作,這樣才能獲取到更加全面的信息。SQL中,我們可以使用JOIN(連接)關(guān)鍵字來(lái)實(shí)現(xiàn)這個(gè)功能。JOIN有很多種類(lèi)型,比如INNER JOIN(內(nèi)連接)、RIGHT JOIN(右外連接)和LEFT JOIN(左外連接)。這些JOIN的不同之處在于它們對(duì)關(guān)聯(lián)的表的處理方式不同。
高科技分析:筆者個(gè)人理解,SQL里的JOIN就像是社交應(yīng)用里的匹配功能,將不同的“用戶(hù)”(或稱(chēng)“表”)關(guān)聯(lián)起來(lái),找到有關(guān)聯(lián)信息的“匹配對(duì)象”。不同的JOIN就像是不同的匹配方式,有的只找出共同關(guān)注的,有的則不放過(guò)任何一個(gè)潛在的“伴侶”。
而今天我們要說(shuō)的,就是這些JOIN之中的一個(gè)——LEFT JOIN。它最直觀的效果是,將左表中符合條件的記錄與右表的對(duì)應(yīng)記錄組合在一起,如果左表中某條記錄沒(méi)有對(duì)應(yīng)的右表記錄,則右表中的所有字段都為NULL。
這聽(tīng)起來(lái)好像有點(diǎn)抽象,咱們來(lái)看一個(gè)例子就明白了。
假設(shè)有兩張表,一張是“學(xué)生信息表”,一張是“考試成績(jī)表”。其中“學(xué)生信息表”中有id、姓名和班級(jí)字段,而“考試成績(jī)表”中有id、考試科目和成績(jī)字段。我們想要獲取到每個(gè)學(xué)生的所有考試成績(jī)信息,如果沒(méi)有考試成績(jī),則用NULL填充。那么我們可以這么寫(xiě)SQL:
SELECT *
FROM 學(xué)生信息表
LEFT JOIN 考試成績(jī)表
ON 學(xué)生信息表.id = 考試成績(jī)表.id
這個(gè)SQL語(yǔ)句中,我們使用了LEFT JOIN關(guān)鍵字將兩張表連接起來(lái),并設(shè)置連接條件為學(xué)生信息表中的id字段和考試成績(jī)表中的id字段相等。由于我們使用了LEFT JOIN,所以無(wú)論是否有考試成績(jī),每個(gè)學(xué)生都會(huì)出現(xiàn)在結(jié)果集中。
當(dāng)連接成功時(shí),每條來(lái)自左表(學(xué)生信息表)的記錄都會(huì)和來(lái)自右表(考試成績(jī)表)的“匹配對(duì)象”組合在一起。如果右表中沒(méi)有匹配的記錄,則右表中的所有字段都會(huì)被填充為NULL值。這時(shí),我們就可以輕松地獲取到每個(gè)學(xué)生的所有考試成績(jī)信息了。
不知道大家是不是感覺(jué)這個(gè)LEFT JOIN關(guān)鍵字有點(diǎn)神奇???咱們?cè)倏匆粋€(gè)例子。
假設(shè)現(xiàn)在有兩個(gè)表,一個(gè)是“客戶(hù)信息表”,一個(gè)是“訂單信息表”。我們希望查詢(xún)出每個(gè)客戶(hù)的訂單量和訂單金額總額,并展示出所有客戶(hù)信息,即使某個(gè)客戶(hù)沒(méi)有任何訂單也要展示。那么我們可以這么寫(xiě)SQL:
SELECT 客戶(hù)信息表.客戶(hù)名稱(chēng), COUNT(訂單信息表.訂單編號(hào)) as 訂單量, SUM(訂單信息表.訂單金額) as 訂單金額總額
FROM 客戶(hù)信息表
LEFT JOIN 訂單信息表
ON 客戶(hù)信息表.客戶(hù)編號(hào) = 訂單信息表.客戶(hù)編號(hào)
GROUP BY 客戶(hù)信息表.客戶(hù)名稱(chēng)
在這個(gè)SQL語(yǔ)句中,我們使用了LEFT JOIN關(guān)鍵字將兩張表連接起來(lái),并設(shè)置連接條件為客戶(hù)信息表中的客戶(hù)編號(hào)字段和訂單信息表中的客戶(hù)編號(hào)字段相等。由于和上一個(gè)例子類(lèi)似,這里不再重復(fù)說(shuō)明。
當(dāng)連接成功時(shí),每個(gè)客戶(hù)信息都會(huì)和相應(yīng)的訂單信息進(jìn)行“匹配”,并得到訂單量和訂單總金額的統(tǒng)計(jì)值。這時(shí)我們又看到了LEFT JOIN的神奇之處,即使某個(gè)客戶(hù)沒(méi)有任何訂單信息,也會(huì)被展示出來(lái),并將訂單量和訂單金額總額設(shè)置為0。
相比起其他JOIN關(guān)鍵字,LEFT JOIN的效果確實(shí)有些不同。在某些情況下,我們需要獲取到所有記錄,而不是只獲取一些共同記錄。這時(shí),LEFT JOIN就是我們的最佳選擇。
哎呦,今天的文章就寫(xiě)到這里,希望對(duì)大家有所幫助。SQL中的LEFT JOIN關(guān)鍵字雖然看起來(lái)很神奇,但只要明白了它的作用和使用方式,就能輕松地進(jìn)行關(guān)聯(lián)查詢(xún)了。 www.cppxvbw.com.cn 寧波海美seo網(wǎng)絡(luò)優(yōu)化公司 是網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站優(yōu)化,企業(yè)關(guān)鍵詞排名,網(wǎng)絡(luò)營(yíng)銷(xiāo)知識(shí)和開(kāi)發(fā)愛(ài)好者的一站式目的地,提供豐富的信息、資源和工具來(lái)幫助用戶(hù)創(chuàng)建令人驚嘆的實(shí)用網(wǎng)站。 該平臺(tái)致力于提供實(shí)用、相關(guān)和最新的內(nèi)容,這使其成為初學(xué)者和經(jīng)驗(yàn)豐富的專(zhuān)業(yè)人士的寶貴資源。
聲明本文內(nèi)容來(lái)自網(wǎng)絡(luò),若涉及侵權(quán),請(qǐng)聯(lián)系我們刪除! 投稿需知:請(qǐng)以word形式發(fā)送至郵箱18067275213@163.com
下手晚了,我是八月份才買(mǎi)的這本書(shū),當(dāng)時(shí)開(kāi)個(gè)網(wǎng)店,感覺(jué)很確少這方面的知識(shí),也是偶然間發(fā)現(xiàn)這本書(shū)的,介紹得挺好,也看過(guò)相關(guān)品論,就試著買(mǎi)了一本,沒(méi)想到買(mǎi)正著了,書(shū)內(nèi)容通俗易懂,而且很貼切,讓我受益匪淺,也曾在博客里寫(xiě)了相關(guān)的自己讀后的實(shí)踐,今天才發(fā)現(xiàn)還有發(fā)博文能得到站長(zhǎng)先生親自?xún)?yōu)化網(wǎng)站的機(jī)會(huì),可惜錯(cuò)失了,真是很遺憾!不過(guò)能得到一本好書(shū)也是很幸運(yùn)的,我也從中得到不少實(shí)惠,再此也很感謝站長(zhǎng)先生,謝謝您,奉獻(xiàn)給我們這么好的書(shū)籍!呵呵,當(dāng)然了,我也很高興的替你進(jìn)行了義務(wù)宣傳!