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