MySQL - COALESCE() 函數

Hello, 熱心的資料庫愛好者!今天,我們將深入探討 MySQL 中一個非常有用的函數,名為 COALESCE()。如果你之前從未聽過它,別擔心——在這個教學的結束,你將能夠像專業人士一樣使用它!

MySQL - Coalesce() Function

COALESCE() 函數是什麼?

COALESCE() 函數在 MySQL 世界裡就像是一個超人。它的超能力是什麼?在列表中找到第一個非 NULL 的值。想像你正在尋找汽車鑰匙,你有一個可能放置的位置列表。COALESCE() 函數就像按順序檢查每個地方,直到找到鑰匙。一旦找到,它就停止尋找並返回那個值。

語法

COALESCE(value1, value2, ..., valueN)

這個函數接受任何數量的參數,並返回第一個非 NULL 的值。如果所有值都是 NULL,它返回 NULL。

COALESCE() 的基本使用

讓我們從一個簡單的例子開始:

SELECT COALESCE(NULL, 1, 2, 'three');

結果:1

在這個例子中,COALESCE() 從左到右檢查每個值:

  1. 首先,它看到 NULL 並繼續前進。
  2. 然後它找到 1,這不是 NULL,所以它停止並返回 1。

它甚至從未達到 2 或 'three',因為它早些時候找到了一個非 NULL 的值。

實際應用場景

場景 1:默認值

想像你正在建立一個用戶個人資料系統。有些用戶可能沒有提供他們的所有信息。以下是如何使用 COALESCE() 的方法:

SELECT
username,
COALESCE(full_name, username) AS display_name,
COALESCE(email, 'No email provided') AS contact
FROM users;

這個查詢做了兩件聰明的事情:

  1. 如果 full_name 是 NULL,它使用 username 作為顯示名稱。
  2. 如果 email 是 NULL,它顯示 'No email provided'。

場景 2:多個後備選項

讓我們說你在經營一個線上商店並想要顯示產品信息:

SELECT
product_name,
COALESCE(sale_price, regular_price, 'Price not available') AS displayed_price
FROM products;

這個查詢:

  1. 檢查是否有 sale_price。
  2. 如果沒有,它尋找 regular_price。
  3. 如果兩者都是 NULL,它顯示 'Price not available'。

COALESCE() 與計算

COALESCE() 不僅僅用於簡單值;你也可以將它用於計算!

SELECT
employee_name,
COALESCE(salary * 1.1, base_rate * 40 * 52) AS yearly_income
FROM employees;

這個查詢:

  1. 檢查薪水的 10% 提成。
  2. 如果薪水是 NULL,它根據小時工資(假設每周 40 小時,一年 52 週)計算年收入。

COALESCE() 在 WHERE 子句中使用

你也可以在 WHERE 子句中使用 COALESCE() 來過濾數據:

SELECT * FROM orders
WHERE COALESCE(shipping_date, order_date) < '2023-01-01';

這會找到所有在 2023 年之前已經發貨或訂購(如果還未發貨)的訂單。

COALESCE() 與 IFNULL()

MySQL 還有一個 IFNULL() 函數,它類似但限制為兩個參數:

SELECT
IFNULL(column1, 'Default') AS result1,
COALESCE(column1, column2, column3, 'Default') AS result2
FROM my_table;

COALESCE() 更為靈活,因為它可以處理多個後備選項。

常見錯誤和小貼士

  1. 順序很重要:始終將你偏好的值放在前面。
  2. 類型一致性:嘗試保持數據類型一致,以獲得更乾淨的結果。
  3. 性能:雖然強大,但過度使用 COALESCE() 可能會在大數據集上影響查詢性能。

練習題

讓我們通過一些練習來鞏固你的理解:

  1. 創建一個名為 students 的表,包含以下列:id, name, math_score, science_score, history_score。
  2. 插入一些數據,留一些成績為 NULL。
  3. 寫一個查詢來找到每個學生在所有科目中的最高分。
  4. 使用 COALESCE() 來為任何 NULL 成績顯示 'Not attempted'。

結論

COALESCE() 函數是 MySQL 中的一個強大工具,它可以帮助你優雅地處理 NULL 值並創建有強度的查詢。記住,這都是關於找到第一個非 NULL 值,就像先在最可能的地點找到你的鑰匙一樣!

在你繼續 MySQL 的旅程時,你會發現 COALESCE() 成為了你工具包中不可或缺的一部分。繼續練習,很快你就能像數據庫巫師一樣將 COALESCE()。

快樂編程,願你的查詢總是返回你所尋求的結果!

Credits: Image by storyset