承接基礎 SELECT 練習,本單元使用 nobel(yr, subject, winner) 資料表,涵蓋條件篩選、IN/BETWEEN/LIKE 進階用法、特殊字元跳脫、排序規則、ORDER BY 條件式排序等 14 道題目,強化多條件組合與結果排序技巧。
nobel(yr INT, subject VARCHAR(20), winner VARCHAR(100))
-- 範例
1960 | Chemistry | Willard F. Libby
1960 | Literature | Saint-John Perse
...
| # | 題目需求 | SQL 語句 | 關鍵技巧 |
|---|---|---|---|
| 1 | 1950 年得獎資料 | SELECT yr, subject, winner FROM nobel WHERE yr = 1950 | 基本 WHERE 篩選 |
| 2 | 1962 年文學獎得主 | SELECT winner FROM nobel WHERE yr = 1962 AND subject = 'Literature' | 多條件 AND |
| 3 | 愛因斯坦得獎年份與獎項 | SELECT yr, subject FROM nobel WHERE winner = 'Albert Einstein' | 反向查詢 |
| 4 | 2000 年後和平獎得主 | SELECT winner FROM nobel WHERE yr >= 2000 AND subject = 'Peace' | 範圍比較 |
| 5 | 1980-1989 年文學獎完整資訊 | SELECT * FROM nobel WHERE yr BETWEEN 1980 AND 1989 AND subject = 'Literature' | BETWEEN 含邊界 |
| 6 | 三位總統得主完整資訊 | SELECT * FROM nobel WHERE winner IN ('Theodore Roosevelt','Woodrow Wilson','Jimmy Carter') | IN 列表匹配 |
| 7 | 名字為 John 開頭的得主 | SELECT winner FROM nobel WHERE winner LIKE 'John%' | 前綴模糊 |
| 8 | 1980 物理獎 & 1984 化學獎 | SELECT * FROM nobel WHERE (yr=1980 AND subject='Physics') OR (yr=1984 AND subject='Chemistry') | 括號控制 OR/AND 優先序 |
| 9 | 1980 年非化學/醫學獎 | SELECT * FROM nobel WHERE yr = 1980 AND subject NOT IN ('Chemistry','Medicine') | NOT IN 排除 |
| 10 | 1910 前醫學獎 + 2004 後文學獎 | SELECT * FROM nobel WHERE (yr < 1910 AND subject='Medicine') OR (yr >= 2004 AND subject='Literature') | 複合條件組合 |
| 11 | Peter Grünberg 得獎詳情 | SELECT * FROM nobel WHERE winner = 'Peter Grünberg' | Unicode 字元處理 |
| 12 | Eugene O'Neill 得獎詳情 | SELECT * FROM nobel WHERE winner = 'Eugene O\'Neill' | 單引號跳脫 \' |
| 13 | 爵士得主,新舊優先、同年名字序 | SELECT winner, yr, subject FROM nobel WHERE winner LIKE 'Sir%' ORDER BY yr DESC, winner ASC | 多欄位混合排序 |
| 14 | 1984 年得主,Chemistry/Physics 最後顯示 | SELECT winner, subject FROM nobel WHERE yr = 1984 ORDER BY subject IN ('Physics','Chemistry'), subject, winner | 布林排序:FALSE(0) 在前,TRUE(1) 在後 |
字串常值中含單引號需用 \' 跳脫(MySQL/PostgreSQL),或雙單引號 ''(SQL Server/Oracle)。題目 12 是經典陷阱。
subject IN ('Physics','Chemistry') 回傳 0/1,ORDER BY 0, subject, winner 使非物理/化學獎優先,再依科目、名字排序。此技巧常用於「指定類別置底/置頂」需求。
AND 優先於 OR 導致邏輯錯誤IN 列表優於多個 OR,可讀性與效能皆優BETWEEN 含邊界,日期/數值範圍首選完成 Nobel 單元後,建議進階至 JOIN(多表關聯)、GROUP BY/HAVING(聚合分析)、子查詢與 EXISTS 等主題,逐步掌握企業級報表查詢能力。