《左連接與內(nèi)連接的區(qū)別》—— 數(shù)據(jù)庫(kù)小白也能秒懂的實(shí)用指南
你是不是也曾在寫SQL時(shí),被“LEFT JOIN”和“INNER JOIN”搞得一頭霧水?別急,我來(lái)用最接地氣的方式,帶你搞清楚這兩個(gè)“看似相似實(shí)則不同”的關(guān)鍵詞。
問:左連接(LEFT JOIN)和內(nèi)連接(INNER JOIN)到底有什么區(qū)別?
簡(jiǎn)單說(shuō):內(nèi)連接只返回兩個(gè)表中都有匹配數(shù)據(jù)的那一部分;而左連接會(huì)保留左邊表的所有記錄,即使右邊表沒有匹配項(xiàng),也會(huì)用NULL補(bǔ)上。
舉個(gè)真實(shí)案例??:
假設(shè)你在做電商數(shù)據(jù)分析,有兩張表:
1. users 表(用戶信息):
| user_id | name ||||| 1 | 張三 || 2 | 李四 || 3 | 王五 |
2. orders 表(訂單信息):
| order_id | user_id | amount |||||| 101 | 1 | 299 || 102 | 2 | 150 |
現(xiàn)在你想查出每個(gè)用戶的訂單情況,但不希望漏掉沒下單的用戶。
用 INNER JOIN:
SELECT u.name, o.amountFROM users uINNER JOIN orders o ON u.user_id = o.user_id;
結(jié)果只有張三和李四,王五因?yàn)闆]訂單被直接過濾掉了 ?? 沒有王五!
用 LEFT JOIN:
SELECT u.name, o.amountFROM users uLEFT JOIN orders o ON u.user_id = o.user_id;
結(jié)果是:
| name | amount ||||| 張三 | 299 || 李四 | 150 || 王五 | NULL |
看!王五雖然沒下單,但依然出現(xiàn)在結(jié)果里 ?? 這就是左連接的魅力!
為什么這個(gè)區(qū)別這么重要?
在實(shí)際工作中,比如你要做用戶留存分析、訂單統(tǒng)計(jì)、或者報(bào)表展示,如果用了內(nèi)連接,可能會(huì)誤判“某些用戶不存在”,其實(shí)只是他們還沒下單而已。這時(shí)候左連接就像一位貼心的朋友,不會(huì)丟下任何一個(gè)你關(guān)心的人。
??小貼士: 內(nèi)連接適合“我要找有關(guān)系的數(shù)據(jù)”; 左連接適合“我要看所有人的狀態(tài),哪怕他們啥都沒干”。
下次寫SQL時(shí),記得先問自己一句:“我要不要保留左邊表的全部數(shù)據(jù)?”——答案決定你是用LEFT還是INNER。
學(xué)會(huì)了?趕緊轉(zhuǎn)發(fā)給正在被JOIN困擾的朋友吧~ ???

