CodeGym /課程 /SQL SELF /用 SELECT、WHERE 跟 ORDER BY 寫簡單查詢

用 SELECT、WHERE 跟 ORDER BY 寫簡單查詢

SQL SELF
等級 3 , 課堂 2
開放

現在是時候把這些東西全部串起來,學會怎麼用 SELECTWHEREORDER BY 組合出簡單又實用的查詢啦。這個技能超級實用,從拿到用戶清單到做小型報表都用得到。

在開始之前,先提醒一下,簡單 SQL 查詢的結構長這樣:

SELECT 欄位1, 欄位2, 欄位3
FROM 資料表
WHERE 條件
ORDER BY 欄位 ASC
LIMIT 筆數
OFFSET 筆數;

如果 SQL 是一本小說,SELECT 就是章節標題,FROM 是內容,WHERE 是劇情解釋。然後 ORDER BY 加上排序,讓你看起來更有條理!

語法順序一定要照規定來。 有些可以省略(不寫),但順序不能亂。

範例 1:選出成績最好的學生名字

假設我們有一個 students 資料表,結構跟資料如下:

id name age grade
1 Otto 21 A
2 Maria 22 B
3 Alex 20 A
4 Nat 23 C
5 Dan 25 B

你要拿到所有成績是 A 的學生清單(也就是 grade = 'A'),而且要照名字排序。這樣寫就對了:

SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;

結果:

name
Alex
Otto

說明

  1. SELECT name — 只選名字。沒必要浪費資源撈不需要的資料。
  2. WHERE grade = 'A' — 過濾出成績是 A 的人。
  3. ORDER BY name ASC — 用名字做字母排序。

範例 2:用價格找商品

現在假設我們有一個 products 資料表,裡面有商品資訊:

id product_name category price
1 智慧型手機 Electronics 30000
2 電視 Electronics 45000
3 冰箱 Appliances 50000
4 吸塵器 Appliances 15000
5 燈泡 Lighting 500

我們的任務是拿到 "Electronics" 分類的商品清單,然後照價格從高到低排。查詢這樣寫:

SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;

結果:

product_name price
電視 45000
智慧型手機 30000

說明

  1. SELECT product_name, price — 選商品名稱跟價格。
  2. WHERE category = 'Electronics' — 只要 "Electronics" 分類的商品。
  3. ORDER BY price DESC — 用價格從高到低排(最貴的在最前面)。

範例 3:用邏輯組合複雜過濾

還是用 students 這張表。假設我們要找年齡超過 21 歲,成績是 BC 的學生,然後照年齡排序。這裡要組合多個條件:

SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;

結果:

name age grade
Maria 22 B
Nat 23 C
Dan 25 B

說明

  1. WHERE age > 21 — 只選年齡超過 21 歲的學生。
  2. AND (grade = 'B' OR grade = 'C') — 過濾成績是 BC 的人。括號是用來分組條件。
  3. ORDER BY age ASC — 用年齡從小到大排。

範例 4:排序跟過濾一起用

回到 products 這張表。我們想找價格低於 50,000 的商品,先照分類排,然後每個分類裡再照價格從低到高排。

SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;

結果:

product_name category price
吸塵器 Appliances 15000
智慧型手機 Electronics 30000
電視 Electronics 45000
燈泡 Lighting 500

說明

  1. WHERE price < 50000 — 先過濾出價格低於 50,000 的商品。
  2. ORDER BY category ASC, price ASC — 先照分類(字母順序)排,每個分類裡再照價格從低到高排。

範例 5:常見錯誤 — 忘記分組條件

來看看會出什麼錯。如果你忘了用括號分組條件,像這樣:

錯誤查詢:

SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;

這裡 OR grade = 'C' 會直接執行,沒考慮 AND age > 21,查詢結果會把所有成績是 C 的人都撈出來,不管他幾歲。

所以一定要用 括號,才不會搞混:

WHERE age > 21 AND (grade = 'B' OR grade = 'C')
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION