MySQL - IN 運算子

你好,未來的數據庫魔法師們!今天,我們將要深入探討 MySQL 最有用的工具之一:IN 運算子。把它當成一枝能夠更有效率過濾數據的魔法棒。所以,請坐好你的虛擬座位,讓我們一起踏上這次令人興奮的旅程!

MySQL - IN Operator

MySQL IN 運算子

IN 運算子就像俱樂部裡友善的保全人員。它會檢查一個值是否與列表中的任何值匹配。想像你想要找出你最喜歡的水果是否在商店有售。而不是一一詢問,“你有蘋果嗎?你有香蕉嗎?你有橙子嗎?”你可以直接問,“你有這些水果中的任何一種嗎:蘋果、香蕉或橙子?”這正是 IN 運算子的作用!

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

SELECT * FROM fruits WHERE name IN ('apple', 'banana', 'orange');

這個查詢表示,“顯示所有蘋果、香蕉或橙子。”就像是告訴你的電腦成為一名水果偵探!

這裡還有另一個例子:

SELECT * FROM employees WHERE department IN ('HR', 'IT', 'Finance');

這個查詢會找出所有在人事、資訊技術或財務部門工作的員工。這比寫:

SELECT * FROM employees WHERE department = 'HR' OR department = 'IT' OR department = 'Finance';

簡潔得多。看 IN 運算子讓事情變得多整潔?就像是整理你的 SQL 衣櫥!

在 UPDATE 句中使用 IN 運算子

現在,讓我們看看我們的 IN 運算子朋友如何用來更新數據。想像你是一名老師(就像我!)並且想要給所有考試得分為 95、98 或 100 的學生發放獎金。

UPDATE students
SET has_bonus = TRUE
WHERE score IN (95, 98, 100);

這個查詢會更新所有得分為 95、98 或 100 的學生,將他們的 'has_bonus' 字段設為 TRUE。就像是揮動魔法棒並說,“恭喜,高分者!”

MySQL NOT IN 運算子

有時,我們想要找出不在特定列表中的事物。這就是 NOT IN 登場的時候。這就像是在說,“除了這些,顯示所有東西。”

例如:

SELECT * FROM fruits WHERE name NOT IN ('apple', 'banana', 'orange');

這個查詢會顯示除了蘋果、香蕉和橙子之外的所有水果。這對於你想嘗試新水果時非常完美!

使用 IN 運算子比較值

IN 運算子非常適合用於比較多個值。舉例來說,如果你是一名圖書管理員(我大學時曾在圖書館做志願者!),並且想要找出特定作者撰寫的書籍:

SELECT title, author FROM books
WHERE author IN ('J.K. Rowling', 'George R.R. Martin', 'Stephen King');

這個查詢會找出這三名作者所寫的所有書籍。就像是進行一場文學寶藏獵!

使用 IN 運算子的 MySQL 子查詢

現在,我們來升級一個層次,並使用子查詢與我們的 IN 運算子。子查詢就像是查詢中的查詢 - 这就是 SQL 的“套娃”!

想像你想要找出所有在員工數量超過 50 人的部門工作的員工:

SELECT name, department
FROM employees
WHERE department IN (
SELECT department
FROM employees
GROUP BY department
HAVING COUNT(*) > 50
);

這個查詢首先找出所有員工數量超過 50 人的部門,然後使用這個結果來找出那些部門中的所有員工。這就像是問,“誰是大團隊的一部分?”

在客戶端程序中使用 IN 運算子

當使用客戶端程序與 MySQL 交互時,你可以使用變量與 IN 運算子。這在你想讓你的查詢更具動態性時特別有用。

以下是一個使用 Python 的例子:

import mysql.connector

# 連接到數據庫
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# 定義你想搜索的值
search_values = ('apple', 'banana', 'orange')

# 創建查詢
query = "SELECT * FROM fruits WHERE name IN (%s, %s, %s)"

# 執行查詢
cursor.execute(query, search_values)

# 獲取並打印結果
for (name, color, price) in cursor:
print(f"{name}: {color}, ${price}")

# 關閉連接
cursor.close()
cnx.close()

在這個例子中,我們使用 Python 來連接到 MySQL 數據庫並執行一個帶有 IN 運算子的查詢。查詢中的 %s佔位符在查詢執行時會被 search_values 中的值填充。

以下是一個總結我們使用 IN 運算子的不同方式的表格:

使用方式 示例
基本 SELECT SELECT * FROM fruits WHERE name IN ('apple', 'banana', 'orange');
UPDATE UPDATE students SET has_bonus = TRUE WHERE score IN (95, 98, 100);
NOT IN SELECT * FROM fruits WHERE name NOT IN ('apple', 'banana', 'orange');
帶子查詢 SELECT name FROM employees WHERE department IN (SELECT department FROM employees GROUP BY department HAVING COUNT(*) > 50);
在客戶端程序中 query = "SELECT * FROM fruits WHERE name IN (%s, %s, %s)"

這就是全部了,各位!我們從多個角度探討了 IN 運算子。記住,熟能生巧,所以不要害怕嘗試這些查詢。SQL 最初可能看起來讓人卻步,但隨著時間的推移,你會像專家一樣寫出查詢。持續編程,持續學習,最重要的是,享受樂趣!

Credits: Image by storyset