SQL - WHERE 子句
歡迎,未來的數據庫魔法師們!今天,我們要深入探討你們 SQL 工具包中最強大的工具之一:WHERE 子句。作為你們親切友善的計算機科學老師,我將指導你們走過這段令人興奮的旅程。所以,拿起你們的虛擬魔杖(鍵盤),讓我們施展一點 SQL 魔法吧!
SQL WHERE 子句
想像一下你在一個藏有數百萬本書的巨大圖書館裡。你正在尋找一本關於龍的特定書籍。你會一一翻閱每一本書嗎?當然不會!你會請圖書管理員幫你找到關於龍的書籍。在 SQL 中,WHERE 子句就是你的幫助者圖書管理員。
WHERE 子句讓我們能夠根據特定條件過濾數據。這就像告訴數據庫:"嘿,我只想要看符合這些條件的特定信息。"
這裡是基本語法:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
別擔心這看起來有點嚇人。我們會一步步分解,很快你就能像專家一樣過濾數據!
WHERE 子句與 SELECT 語句
我們從一個簡單的例子開始。想像我們有一個名為 students
的表,其中有 id
、name
和 age
欄位。我們想要找到所有 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