SQL - IN 運算子

Hello, 動手學習 SQL 的同好們!今天,我們將要深入 SQL IN 運算子的奇妙世界。作為你們親切的鄰居電腦老師,我非常興奮能夠帶領你們踏上這次旅程。別擔心你們是編程新手——我們會從基礎開始,逐步學習。所以,拿起你們最喜歡的飲料,放鬆身心,我們開始吧!

SQL - IN Operator

The SQL IN Operator

IN 運算子就像是一家專屬俱樂部的 VIP 保鏢——它會檢查一個值是否在一系列值中。想像你正在規劃一個派對,並有一份客人名單。IN 運算子能夠幫你快速檢查某人的名字是否在這份名單上。

讓我們用一個簡單的例子來說明:

SELECT * FROM Customers
WHERE Country IN ('USA', 'UK', 'Canada');

在這個查詢中,我們請求數據庫顯示所有來自美國、英國或加拿大的客戶。這就像是在說:"嘿,數據庫,給我所有屬於這個酷炫國家俱樂部的客戶!"

IN 運算子讓我們不必寫下多個 OR 條件:

SELECT * FROM Customers
WHERE Country = 'USA' OR Country = 'UK' OR Country = 'Canada';

看看 IN 版本有多乾淨?這就像是在說:"我想要蘋果或橙子或香蕉" 和簡單地說 "我想要這些水果" 的差別。

IN 運算子與 SELECT 語句

現在,讓我們看看如何在各種 SELECT 語句中使用 IN 運算子。想像我們在線上商店數據庫中有一個 "Products" 表。

Example 1: 找到特定類別中的產品

SELECT ProductName, Price
FROM Products
WHERE Category IN ('Electronics', 'Books', 'Toys');

這個查詢會從電子產品、書籍和玩具類別中取得所有產品的名稱和價格。這就像是在問你的庫存經理:"我們在這三個部門有哪些商品,它們的價格是多少?"

Example 2: 使用數字與 IN

IN 運算子不僅適用於文字——它對數字也非常有效!

SELECT OrderID, OrderDate
FROM Orders
WHERE OrderID IN (10248, 10250, 10251);

在這裡,我們通過訂單 ID 數字來檢索特定的訂單。這就像從你的檔案櫃中挑選出特定的收據。

IN 運算子與 UPDATE 語句

IN 運算子不僅適用於 SELECT 語句——它在更新記錄時也非常有用。

Example: 一次更新多個產品

UPDATE Products
SET Price = Price * 1.1
WHERE Category IN ('Electronics', 'Computers');

這個查詢會將電子產品和計算機類別中所有產品的價格提高 10%。這就像是在你的商店中一次性給所有科技商品加薪!

IN 運算子與 NOT

有時,我們想要找到不在特定列表中的所有東西。這時,NOT IN 會來拯救我們。

Example: 找到特定國家以外的客戶

SELECT CustomerName, Country
FROM Customers
WHERE Country NOT IN ('USA', 'UK', 'Canada');

這個查詢會找到所有來自美國、英國或加拿大以外的客戶。這就像是在說:"顯示所有不是我們北美和英國俱樂部成員的客戶。"

IN 運算子與列名

這裡有一個酷炫的技巧——你可以使用 IN 運算子將一個值與列中的值進行比較!

Example: 找到特定客戶的訂單

SELECT OrderID, CustomerID
FROM Orders
WHERE CustomerID IN (SELECT CustomerID FROM Customers WHERE Country = 'Germany');

這個查詢會找到所有德國客戶的訂單。這就像是在問:"顯示所有我們德國朋友下的訂單。"

子查詢與 IN 運算子

當與子查詢結合使用時,IN 運算子真正發揮了它的光芒。子查詢就像是查詢中的查詢——這是 SQL 的 "套娃"!

Example: 找到已經被訂購的產品

SELECT ProductName
FROM Products
WHERE ProductID IN (SELECT ProductID FROM OrderDetails);

這個查詢會找到所有至少被訂購過一次的產品。這就像是在問:"我們哪些產品實際上有在銷售?"

IN 運算子方法的總結

這裡有一個方便的表格,總結了我們可以使用 IN 運算子的不同方式:

方法 描述 示例
基本 IN 檢查一個值是否在列表中的任意值 WHERE Country IN ('USA', 'UK', 'Canada')
NOT IN 檢查一個值是否不在列表中的任何值 WHERE Country NOT IN ('USA', 'UK', 'Canada')
與子查詢一起使用的 IN 使用子查詢生成列表 WHERE ProductID IN (SELECT ProductID FROM OrderDetails)
與列名一起使用的 IN 與列中的值進行比較 WHERE CustomerID IN (SELECT CustomerID FROM Customers WHERE Country = 'Germany')

這就是了,各位!我們一起走過了 SQL IN 運算子的土地。從基本的列表檢查到複雜的子查詢,IN 運算子是你 SQL 工具箱中的強大工具。記住,熟練是通過練習而來的,所以不要害怕在數據庫中嘗試這些查詢。

在我們結束時,我回想起當我教導一個特別棘手的 SQL 概念時。其中一位學生舉手說:"哦,現在我明白了!這就像是我整理襪子——我可以快速找到所有的藍色襪子,而不需要一一檢查每一雙!" 而你知道嗎?她說得非常對。IN 運算子就是關於有效的排序和檢查。

所以,請持續練習,持續查詢,最重要的是,享受學習 SQL 的過程。在你意識到之前,你將能夠輕鬆地寫出複雜的查詢,就像一個資深的數據庫巫師一樣。下次見,快樂編程!

Credits: Image by storyset