好啦,我們已經知道怎麼用 SELECT 指令了。至少,我們已經學會怎麼從資料庫抓資料、選要的欄位,還有寫出一些查詢,把原始資料變成有用的資訊。現在是時候在我們的魔法調色盤裡加點「過濾器」了。沒錯,今天要聊的就是用 資料過濾,靠的就是像 =、>、< 跟 <> 這些比較運算子。
當你在處理很大的表格時,通常你不會想看全部的資料(除非你想體驗一下混亂)。要只挑出你要的那些列,SQL 裡就有個關鍵字 WHERE。它可以讓你設定條件,每一列都要 符合這些條件 才會被查詢選出來。而這些條件,就是靠 比較運算子 來寫的。
用 WHERE 過濾的語法
SELECT 欄位1, 欄位2
FROM 表格
WHERE 條件;
很簡單的結構:在 FROM 指定表格之後,加上 WHERE,然後寫你要的 條件,只有符合的列才會被選出來。
舉個例子,從 students 表格抓資料:
SELECT name, age
FROM students
WHERE age > 18;
這個查詢只會選出那些年齡大於 18 歲的學生(名字跟年齡)。很簡單對吧?現在我們來深入比較運算子的世界。
主要的比較運算子
SQL 裡有幾個比較運算子,可以讓你照自己的需求過濾資料。其實你在數學課應該都看過,只是這裡要再說明一下。這裡是最常用的幾個:
=— 等於。<>— 不等於(有些 DB 也可以用!=,但建議用<>,因為這是 SQL 標準)。>— 大於。<— 小於。>=— 大於等於。<=— 小於等於。
比較運算子對照表
| 運算子 | 意思 | 範例 | 結果 |
|---|---|---|---|
= |
等於 | age = 20 |
回傳年齡 20 的列 |
<> |
不等於 | age <> 20 |
回傳年齡 不是 20 的列 |
> |
大於 | age > 18 |
回傳年齡 大於 18 的列 |
< |
小於 | age < 18 |
回傳年齡 小於 18 的列 |
>= |
大於等於 | age >= 18 |
回傳年齡 18 或更大 的列 |
<= |
小於等於 | age <= 18 |
回傳年齡 18 或更小 的列 |
比較運算子的使用範例
範例 1:抓出年齡超過 20 歲的學生
這是我們的表格:
| id | name | age |
|---|---|---|
| 1 | Alex Lin | 22 |
| 2 | Anna Song | 19 |
| 3 | Otto Art | 21 |
SELECT name, age
FROM students
WHERE age > 20;
這裡我們設定條件 age > 20,只會選出年齡超過 20 的學生。如果有個學生 19 歲,很抱歉,他就不會被選出來。
這次查詢會得到這樣的結果:
| name | age |
|---|---|
| Alex Lin | 22 |
| Otto Art | 21 |
學生 Anna Song 沒被選到,因為她只有 19 歲。
範例 2:抓出薪水至少 50,000 的員工
這是我們的 employees 表格:
| first_name | last_name | salary |
|---|---|---|
| Julia | Kim | 48000 |
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
然後這是我們的 SQL 查詢:
SELECT first_name, last_name, salary
FROM employees
WHERE salary >= 50000;
這個查詢會回傳所有薪水 等於 50,000 或 超過 這個數字的員工。等於也算喔!
| first_name | last_name | salary |
|---|---|---|
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
範例 3:抓出價格小於 100 的商品
| product_name | price |
|---|---|
| USB Cable | 85 |
| Wireless Mouse | 150 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
SELECT product_name, price
FROM products
WHERE price < 100;
如果你有個網路商店,用這個查詢就可以選出所有價格小於 100 的商品(比如做個「全部 99 元!」的促銷活動)。
| product_name | price |
|---|---|
| USB Cable | 85 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
範例 4:排除掉 id 為特定值的使用者
SELECT id, username
FROM users
WHERE id <> 1;
這個查詢會選出所有 除了 id 等於 1 的使用者。<> 這個運算子就是「給我所有不等於這個值的」。
users 表格:
| id | username |
|---|---|
| 1 | admin |
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
查詢結果:
| id | username |
|---|---|
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
用比較運算子過濾時常見的錯誤
剛開始寫過濾查詢時,常常會遇到一些錯誤。這裡有幾個常見的狀況,記得注意:
問題 1:欄位名稱拼錯
如果你在查詢裡把欄位名稱寫錯,PostgreSQL 會報錯。例如:
SELECT name, age
FROM students
WHERE ages > 18; -- 錯誤:沒有 "ages" 這個欄位
寫查詢前一定要確認欄位名稱拼對了。
問題 2:比較運算子用錯
有時候新手會不小心把運算子寫錯。例如:
SELECT name, age
FROM students
WHERE age => 18; -- 錯誤:運算子寫錯
正確的語法是 >=,不是 =>。
問題 3:過濾不存在的值
如果你用一個表格裡根本沒有的值去過濾,查詢會執行,但結果是空的。例如:
SELECT name
FROM students
WHERE age = 999; -- 結果:0 列
這不是語法錯誤,但如果你本來預期會有資料,可能會搞混。
實際應用
用比較運算子過濾資料,在很多情境都超實用:
- 資料分析: 比如選出所有消費超過 10,000 盧比的客戶。
- 報表: 選出薪水高於平均的員工。
- 監控: 追蹤最近一個月沒上線的使用者。
SQL 讓你能很快從超大的表格裡抓到你要的資料,而比較運算子就是這條路的第一步啦。
GO TO FULL VERSION