首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SQLZoo 練習題解析:諾貝爾獎資料表進階查詢

     編輯:MySQL 綜合教學

SQLZoo 練習題解析:諾貝爾獎資料表進階查詢

承接基礎 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 語句關鍵技巧
11950 年得獎資料SELECT yr, subject, winner FROM nobel WHERE yr = 1950基本 WHERE 篩選
21962 年文學獎得主SELECT winner FROM nobel WHERE yr = 1962 AND subject = 'Literature'多條件 AND
3愛因斯坦得獎年份與獎項SELECT yr, subject FROM nobel WHERE winner = 'Albert Einstein'反向查詢
42000 年後和平獎得主SELECT winner FROM nobel WHERE yr >= 2000 AND subject = 'Peace'範圍比較
51980-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%'前綴模糊
81980 物理獎 & 1984 化學獎SELECT * FROM nobel WHERE (yr=1980 AND subject='Physics') OR (yr=1984 AND subject='Chemistry')括號控制 OR/AND 優先序
91980 年非化學/醫學獎SELECT * FROM nobel WHERE yr = 1980 AND subject NOT IN ('Chemistry','Medicine')NOT IN 排除
101910 前醫學獎 + 2004 後文學獎SELECT * FROM nobel WHERE (yr < 1910 AND subject='Medicine') OR (yr >= 2004 AND subject='Literature')複合條件組合
11Peter Grünberg 得獎詳情SELECT * FROM nobel WHERE winner = 'Peter Grünberg'Unicode 字元處理
12Eugene 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多欄位混合排序
141984 年得主,Chemistry/Physics 最後顯示SELECT winner, subject FROM nobel WHERE yr = 1984 ORDER BY subject IN ('Physics','Chemistry'), subject, winner布林排序:FALSE(0) 在前,TRUE(1) 在後

進階技巧深度解析

1. 特殊字元跳脫

字串常值中含單引號需用 \' 跳脫(MySQL/PostgreSQL),或雙單引號 ''(SQL Server/Oracle)。題目 12 是經典陷阱。

2. ORDER BY 條件式排序(題目 14)

subject IN ('Physics','Chemistry') 回傳 0/1,ORDER BY 0, subject, winner 使非物理/化學獎優先,再依科目、名字排序。此技巧常用於「指定類別置底/置頂」需求。

3. 多條件組合最佳實務

  • 括號明確分組,避免 AND 優先於 OR 導致邏輯錯誤
  • IN 列表優於多個 OR,可讀性與效能皆優
  • BETWEEN 含邊界,日期/數值範圍首選

學習路徑建議

完成 Nobel 單元後,建議進階至 JOIN(多表關聯)、GROUP BY/HAVING(聚合分析)、子查詢與 EXISTS 等主題,逐步掌握企業級報表查詢能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved