SQL - CASE: 新手友善指南

你好啊,有志於SQL的熱情者!今天,我們將踏上一段令人興奮的旅程,探索SQL CASE語句的世界。別擔心你對編程是新手——我將成為你的友好指南,將複雜的概念分解成容易消化的片段。所以,來一杯咖啡,放鬆一下,我們來一起深入探究!

SQL - CASE

SQL CASE語句:你的新好朋友

想像一下你是一家忙碌餐廳廚房中的廚師。你有不同的菜餚配方,對吧?那麼,SQL CASE語句就像是你的配方書——它幫助你根據不同的條件做出決策。它是在你的SQL查詢中添加「如果-那麼-否則」邏輯的一種方式。酷吧?

我們來看一個簡單的例子:

SELECT OrderID, Quantity,
CASE
WHEN Quantity > 30 THEN '數量超過30'
WHEN Quantity = 30 THEN '數量為30'
ELSE '數量低於30'
END AS QuantityText
FROM OrderDetails;

在這個例子中,我們正在查看訂單明細表。對於每個訂單,我們檢查數量並提供描述。如果數量超過30,我們說「數量超過30」,如果恰好為30,我們說「數量為30」,對於其他情況,我們說「數量低於30」。

CASE語句以關鍵字CASE開始,以END結束。在它們之間,我們有我們的條件(WHEN)和每個條件的结果(THEN)。ELSE子句捕獲任何不符合指定條件的情況。

CASE語句與ORDER BY子句:風格排序

現在,讓我們來點刺激的。你知道你可以在你的ORDER BY子句中使用CASE語句嗎?這讓你可以創建自定義的排序規則。這就像能夠以完全獨特的方式組織你的書架一樣!

SELECT CustomerName, City, Country
FROM Customers
ORDER BY
(CASE
WHEN City IS NULL THEN Country
ELSE City
END);

在這個查詢中,我們正在對我們的客戶進行排序。如果客戶有列出城市,我們將按城市排序。但如果城市是NULL(缺失),我們將使用國家。這就像為我們的排序制定一個備用計劃——很聰明,對吧?

CASE語句與GROUP BY子句:風味分組

接下來,我們來看看CASE如何與GROUP BY一起工作。這種組合就像是擁有一個超強的分組工具。

SELECT
CASE
WHEN Age < 18 THEN '18歲以下'
WHEN Age BETWEEN 18 AND 30 THEN '18-30歲'
WHEN Age BETWEEN 31 AND 50 THEN '31-50歲'
ELSE '50歲以上'
END AS AgeGroup,
COUNT(*) AS Count
FROM Customers
GROUP BY
CASE
WHEN Age < 18 THEN '18歲以下'
WHEN Age BETWEEN 18 AND 30 THEN '18-30歲'
WHEN Age BETWEEN 31 AND 50 THEN '31-50歲'
ELSE '50歲以上'
END;

在這裡,我們將我們的客戶分組到年齡類別中。我們使用CASE語句創建類別,然後在GROUP BY子句中使用相同的CASE語句。這個查詢將告訴我們每個年齡組有多少客戶。這就像組織一個大型家族聚會並弄清楚你需要為每個世代準備多少張桌子一樣!

CASE語句與WHERE子句:條件過濾

CASE語句也可以在WHERE子句中成為你的助手,幫助你為數據創建複雜的過濾條件。

SELECT ProductName, UnitsInStock
FROM Products
WHERE
CASE
WHEN CategoryID IN (1,2,3) THEN UnitsInStock > 20
WHEN CategoryID IN (4,5,6) THEN UnitsInStock > 30
ELSE UnitsInStock > 40
END;

在這個例子中,我們根據庫存水平選擇產品,但所需的庫存水平會根據類別而變化。對於類別1、2和3,我們需要超過20個單位的產品。對於類別4、5和6,我們需要超過30個單位。對於所有其他類別,我們尋找超過40個單位的產品。這就像為商店的不同部分設置不同的庫存要求一樣!

CASE語句與UPDATE:智能數據更新

CASE語句不僅用於SELECT查詢。它們還可以幫助你以複雜的方式更新你的數據。

UPDATE Employees
SET Salary =
CASE
WHEN Department = 'IT' THEN Salary * 1.10
WHEN Department = 'Sales' THEN Salary * 1.05
ELSE Salary * 1.03
END;

這個查詢根據部門給予不同的加薪。IT部門獲得10%的加薪,銷售部門獲得5%,其他人則獲得3%。這就像聖誕老人一樣,但不是給玩具,而是給加薪!

CASE語句與INSERT:智能數據插入

最後但同樣重要的是,讓我們看看CASE如何在插入數據時幫助我們。

INSERT INTO SalaryGrades (EmployeeID, Grade)
SELECT EmployeeID,
CASE
WHEN Salary < 30000 THEN '低'
WHEN Salary BETWEEN 30000 AND 50000 THEN '中'
ELSE '高'
END
FROM Employees;

在這裡,我們根據Employees表中的薪資將薪資等級插入到新的表中。我們使用CASE語句為每個員工確定等級。這就像根據某些標準自動分配性能評級一樣!

結論:你的成功之CASE

好了,各位!我們已經穿越了SQL CASE語句的土地,探索了它在各種情況下的應用。從簡單的決策到複雜的數據操作,CASE語句是你在SQL工具箱中的強大工具。

記住,就像任何技能一樣,精通CASE語句需要練習。不要害怕嘗試你自己的查詢。在你意識到之前,你將像專業人士一樣使用CASE語句,為你的數據庫交互添加那麼一點邏輯和靈活性。

持續編碼,持續學習,最重要的是,玩得開心!畢竟,這正是編程世界令人興奮的地方。直到下次,快樂查詢!

方法 描述
CASE與SELECT 用於結果集中的條件輸出
CASE與ORDER BY 允許基於條件的自定義排序
CASE與GROUP BY 根據條件邏輯進行分組
CASE與WHERE 提供複雜的過濾條件
CASE與UPDATE 允許根據條件更新數據
CASE與INSERT 根據條件進行智能數據插入

Credits: Image by storyset