一、Left Join概述
Left Join(左連接)是一種SQL語句的方式,主要用於從兩個或多個表中拿取數據並鏈接在一起。左連接通常使用SELECT語句,它朝着左側表(LEFT table)方向進行連接,而右側表(RIGHT table)方向是可選的。當左表中沒有匹配項時,返回的結果集中將包括左表中所有的記錄,但是右表中的記錄將被賦為 NULL 值。
Left Join 操作通常是針對兩張或多張關聯表進行查詢,關聯表通過一些共同屬性將它們聯繫在一起,而且每張表都同時擁有一個唯一標識符 id。 Left Join 的結果就是通過這些公共屬性,在表格上用組合的形式輸出左表中滿足條件的記錄,並同時允許右表中的 NULL 值。
SELECT a.column1, b.column2, c.column3
FROM table1 a
LEFT JOIN table2 b ON a.id = b.id1
LEFT JOIN table3 c ON b.id2 = c.id
WHERE a.principal LIKE ‘John Smith’;
以上代碼演示了在table1中以John Smith為首的記錄,以及關聯表格的操作。在這個例子中,大家可以發現,表格上的連接方式,就是通過一組 id 進行連接的, left join轉換成 SQL 語句的形式,其過程其實是非常簡單的,只需要根據 SQL 語句的書寫規範,按部就班地書寫,然後通過語句來連接表格,就能夠實現 Left Join 操作了。
二、輕鬆理解Left Join的使用場景
由於 Left Join 可以在結果中返回左側表的全部行,甚至不一定需要匹配的行,所以 Left Join 在對於非必須數據的關聯查詢時非常有效。一般情況下,會有這樣一個比較常見的場景:對於已經存在的記錄進行更新操作,更新需要在另外一個表格中獲取數據,一般情況下,這種數據都偏向於非必須數據,因此,既然非必須,就可以利用Left Join 來進行關聯查詢。
舉例來說,數據庫中有兩個表格,一張表格記錄訂單列表,包括訂單號和訂單名稱等,另一張表格則記錄了重量信息、成本信息等相關數據,包括表格訂單 ID、實際成本等。有時候,當我們需要獲取訂單的詳細信息時,需要將兩份表格聯合查詢,例如獲取最靠近昨天的訂單成本信息。
SELECT orders.orderNo, orderdetails.actualCost
FROM orders
LEFT JOIN orderdetails
ON orders.orderNo = orderdetails.orderNo
WHERE orderdetails.dateCreated = DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY);
在上述 SQL 語句中,我們使用了 Left Join 操作符,連接了2張表格,並且使用 Left Join 來完成了關聯數據的查詢,也沒有丟失訂單列表中沒有任何銷售信息的記錄。
三、Left Join的注意事項
在使用Left Join的時候,可能還會出現一些問題和注意事項:
1、順序問題:
請注意表格之間的鏈接順序,Left Join操作符聯接的兩張表格的聯接順序不可更改,因為一旦修改聯接順序,聯接結果最終會發生改變。
2、性能問題:
在建立 Left Join 操作時,請確保保證系統性能,這就涉及到對於表格進行的優化工作。因為如果在數據量大的情況下,再大的性能問題不會出現在代碼中,而是會出現在了數據庫處理過程中。
3、where條件問題:
需要注意的是,where條件中可能需要對右側表中的列過濾null值。
SELECT orders.orderNo, orderdetails.actualCost
FROM orders
LEFT JOIN orderdetails
ON orders.orderNo = orderdetails.orderNo AND orderdetails.actualCost IS NOT NULL
WHERE orders.dateCreated = DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY);
四、優秀範例
下面給大家推薦一個來自猿急用的優秀 Left Join 範例:
SELECT user.uid, user.name, stats.commentCount as comments
FROM user
LEFT JOIN (
SELECT uid, COUNT(*) AS commentCount
FROM comment
WHERE createTime >= '2011-06-01' AND createTime < '2011-07-01'
GROUP BY uid
) stats ON user.uid = stats.uid
WHERE user.registerTime < '2010-06-01'
ORDER BY stats.commentCount DESC;
以上SQL語句演示的是聯合2張表格, user 和 comment,通過 Left Join 來完美獲得所有的記錄和統計信息。如果我們需要過濾掉不需要的記錄,就直接在 where 後面加上條件過濾就好了,非常的方便。
五、小結
Left Join 是一個比較常見的SQL語句操作符,可以非常方便地從2張或者多張表格中獲取數據、篩選出所需要的內容、建立起表格之間的關係,幫助我們完美完成自己的SQL語句編寫操作。而在實際的開發過程中,有時候會遇到各種各樣問題,例如順序、性能、條件等等,我們需要根據具體情況進行調整和處理。
原創文章,作者:VLTG,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/147390.html