SQL - WHERE 子句

歡迎,未來的數據庫魔法師們!今天,我們要深入探討你們 SQL 工具包中最強大的工具之一:WHERE 子句。作為你們親切友善的計算機科學老師,我將指導你們走過這段令人興奮的旅程。所以,拿起你們的虛擬魔杖(鍵盤),讓我們施展一點 SQL 魔法吧!

SQL - Where Clause

SQL WHERE 子句

想像一下你在一個藏有數百萬本書的巨大圖書館裡。你正在尋找一本關於龍的特定書籍。你會一一翻閱每一本書嗎?當然不會!你會請圖書管理員幫你找到關於龍的書籍。在 SQL 中,WHERE 子句就是你的幫助者圖書管理員。

WHERE 子句讓我們能夠根據特定條件過濾數據。這就像告訴數據庫:"嘿,我只想要看符合這些條件的特定信息。"

這裡是基本語法:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

別擔心這看起來有點嚇人。我們會一步步分解,很快你就能像專家一樣過濾數據!

WHERE 子句與 SELECT 語句

我們從一個簡單的例子開始。想像我們有一個名為 students 的表,其中有 idnameage 欄位。我們想要找到所有 18 歲的學生。

SELECT *
FROM students
WHERE age = 18;

在這個查詢中:

  • SELECT * 意味著我們想要查看所有欄位。
  • FROM students 指定了我們正在查詢的表。
  • WHERE age = 18 是我們的條件。這就像說:"只顯示年齡正好是 18 歲的行。"

假設我們只想看到這些 18 歲學生的名字:

SELECT name
FROM students
WHERE age = 18;

看我們如何將 * 改為 name?現在我們只會看到名字,而不是所有欄位。

WHERE 子句與 UPDATE 語句

WHERE 子句不僅用於 SELECT 語句。它在更新數據時也非常有用。假設我們想要將所有名叫 "Alice" 的學生的年齡更新為 19 歲。

UPDATE students
SET age = 19
WHERE name = 'Alice';

這個查詢會將年齡更改為 19 歲,但僅對名叫 Alice 的學生。沒有 WHERE 子句,我們會不小心更改每個人的年齡!

WHERE 子句與 IN 運算符

如果我們想要找到年齡為 18、19 或 20 歲的學生呢?我們可以使用多個 OR 條件,但有個更整潔的方法:IN 運算符。

SELECT *
FROM students
WHERE age IN (18, 19, 20);

這個查詢會返回所有年齡為 18、19 或 20 歲的學生。這就像說:"這個年齡在這個列表中嗎?如果是,就包含它!"

WHERE 子句與 NOT IN 運算符

現在,如果我們想要找到所有年齡不是 18、19 或 20 歲的學生呢?簡單得很!我們只需在 IN 之前加上 NOT:

SELECT *
FROM students
WHERE age NOT IN (18, 19, 20);

這會給我們所有年齡不是 18、19 或 20 歲的學生。

WHERE 子句與 LIKE 運算符

有時候,我們需要搜索文本數據中的模式。這時 LIKE 運算符就派上用場了。假設我們想要找到所有名字以 'A' 開頭的學生:

SELECT *
FROM students
WHERE name LIKE 'A%';

在這個查詢中,'%' 是一個萬用字符,它匹配任何字符序列。所以 'A%' 意味著 "以 A 開頭,後面跟隨任何字符。"

我們也可以搜索以 'n' 結尾的名字:

SELECT *
FROM students
WHERE name LIKE '%n';

或者任何地方包含 'li' 的名字:

SELECT *
FROM students
WHERE name LIKE '%li%';

WHERE 子句與 AND、OR 運算符

我們經常需要組合多個條件。這時 AND 和 OR 就派上用場了。

讓我們找到所有年齡為 18 歲並且名字以 'A' 開頭的學生:

SELECT *
FROM students
WHERE age = 18 AND name LIKE 'A%';

或者,我們可能想要找到年齡為 18 歲或名字以 'A' 開頭的學生:

SELECT *
FROM students
WHERE age = 18 OR name LIKE 'A%';

你可以組合這些運算符來創建複雜的條件:

SELECT *
FROM students
WHERE (age = 18 OR age = 19) AND (name LIKE 'A%' OR name LIKE 'B%');

這個查詢會找到所有年齡為 18 或 19 歲,並且名字以 'A' 或 'B' 開頭的學生。

這裡是一個總結我們學過的運算符的表格:

運算符 描述 示例
= 等於 WHERE age = 18
<> 或 != 不等於 WHERE age <> 18
> 大於 WHERE age > 18
< 小於 WHERE age < 18
>= 大於或等於 WHERE age >= 18
<= 小於或等於 WHERE age <= 18
IN 匹配列表中的任何值 WHERE age IN (18, 19, 20)
NOT IN 不匹配列表中的任何值 WHERE age NOT IN (18, 19, 20)
LIKE 模式匹配 WHERE name LIKE 'A%'
AND 兩個條件都必須為真 WHERE age = 18 AND name LIKE 'A%'
OR 任何一個條件為真即可 WHERE age = 18 OR name LIKE 'A%'

好了,各位!你們剛剛學會了 WHERE 子句的來龍去脈。記住,熟能生巧。嘗試寫你自己的查詢,試試不同的條件,很快你就能像一個有經驗的數據庫管理員一樣過濾數據。

快樂查詢,願你的 WHERE 子句總是能找到你想要的东西!

Credits: Image by storyset