SQL中的單條件判斷函數IF,和多條件判斷CASE WHEN的用法

在SQL(Structured Query Language)中,有兩個重要的控制流程構造——`IF`函數和`CASE WHEN…THEN`表達式,它們可以用來實現邏輯上的條件判斷。以下是對這兩個構造的深入探討與舉例說明。

SQL中的單條件判斷函數 `IF()`:

`IF()` 函數是一個簡單的條件判斷函數,它接受三個參數:一個條件表達式、如果條件為真的值以及如果條件為假的值。它的語法如下:

IF(condition, value_if_true, value_if_false)

  • Condition: 這是必須的,它是一種邏輯表達式,用來判斷真假。
  • Value_if_true: 如果Condition為真,則返回這個值;否則,忽略此值。
  • Value_if_false: 如果Condition為假,則返回這個值;否則,忽略此值。

舉例來說,假設我們有一張名為「員工」的資料表,其中包含欄位「薪資」與「職稱」。我們想要根據薪資水準來決定是否給予獎金,若月薪低於20,000元,則加發5%的獎金;若是高於30,000元,則不加發任何獎金;其餘情況下,加發10%的獎金。這時可以使用`IF()`函數來實現:

UPDATE Employee SET Bonus = IF(Salary < 20000, Salary * 5/100, IF(Salary > 30000, NULL, Salary * 10/100))
WHERE EmployeeID = 'Emp1'; -- 這裡指定要更新的特定員工

在上述例子中,我們使用內嵌的SQL陳述句`UPDATE`來更新特定的員工記錄。首先,`IF()`函數會檢查當前員工的薪資是否低於20,000元。如果是這樣,那麼就將該員工的獎金設定為薪資乘以5%;如果不是,則進一步比較薪資是否大於30,000元。如果薪資超過了30,000元,獎金被設置為NULL,表示沒有獎金;如果薪資在20,000元到30,000元之間,那麼獎金就是薪資的10%。

SQL中的多條件判斷結構 `CASE WHEN… THEN`:

`CASE WHEN… THEN` 是一個更為靈活的條件判斷構造,它可以處理多個不同的條件分支。它的語法如下:

CASE
WHEN condition1 THEN result1
[WHEN condition2 THEN result2]
[WHEN conditionN THEN resultN]
ELSE else_result
END

  • Condition1, Condition2, …, ConditionN: 是各個需要進行判別的條件表達式。
  • Result1, Result2, …, ResultN: 是對應於各自條件的回傳結果。
  • Else\_result: 當所有條件都不符合時,作為最後的回傳結果。

下面是一個使用`CASE WHEN… THEN`來計算不同層級員工的加班費率的例子:

SELECT EmployeeName, GradeLevel, HourlyRate,
HourlyRate + (GradeLevel - 1) * 2 perHourlyRateWithBonus
FROM Employees;

在上面的例子中,`perHourlyRateWithBonus`列表示的是經過加級後的小時工資率。例如,如果某員工的等級是4,那麼他的小時工資率就會增加3倍的基本工資。因此,對於等級4的員工而言,每小時工資率將會是基本工資加上3倍的工資率。

總結來說,`IF()`函數通常適合用在只需要兩個條件的情況下,而`CASE WHEN… THEN`則能夠處理更多樣化的條件判別需求。瞭解和使用這些結構是SQL程式設計的重要組成部分,有助於撰寫功能強大的查詢和資料庫管理任務。

为您推荐