MySQL左連接的完整解讀

一、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-hk/n/147390.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VLTG的頭像VLTG
上一篇 2024-11-01 14:08
下一篇 2024-11-01 14:08

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • 打造照片漫畫生成器的完整指南

    本文將分享如何使用Python編寫一個簡單的照片漫畫生成器,本文所提到的所有代碼和技術都適用於初學者。 一、環境準備 在開始編寫代碼之前,我們需要準備一些必要的環境。 首先,需要安…

    編程 2025-04-29
  • Python中文版下載官網的完整指南

    Python是一種廣泛使用的編程語言,具有簡潔、易讀易寫等特點。Python中文版下載官網是Python學習和使用過程中的重要資源,本文將從多個方面對Python中文版下載官網進行…

    編程 2025-04-29
  • 服務器安裝Python的完整指南

    本文將為您提供服務器安裝Python的完整指南。無論您是一位新手還是經驗豐富的開發者,您都可以通過本文輕鬆地完成Python的安裝過程。以下是本文的具體內容: 一、下載Python…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 微信小程序和Python數據交互完整指南

    本篇文章將從多個方面介紹如何在微信小程序中實現與Python的數據交互。通過本文的學習,您將掌握如何將微信小程序與後台Python代碼結合起來,實現更豐富的功能。 一、概述 微信小…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows服務器上的日誌,並將其發送到遠程服務器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28

發表回復

登錄後才能評論