iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0

昨天缺少的UD:
https://ithelp.ithome.com.tw/upload/images/20251007/20178846fEKidqp6TN.png

SQL 查詢與排序(ResultSet、ORDER BY)
目的:讓搜尋、列表與排序由SQL來處理
一、為什麼要讓 SQL 處理查詢與排序
在前幾天我已經學會用 SQL CRUD 操作(新增、修改、刪除)。但在那時,我仍然是把資料取出後,用 Java for 迴圈或 sort() 排序。這樣做雖然能動,但效率不高。當資料變多時讓資料庫自己處理排序會更快、更準、更方便。

二、SQL 查詢的核心:SELECT
SELECT 是用來「讀取資料」的指令,可以選出要顯示的欄位、條件,並搭配排序。
最基本格式:
SELECT 欄位1, 欄位2 FROM 表格名稱 WHERE 條件 ORDER BY 欄位 ASC|DESC;

例子:
SELECT name, age FROM students;
SELECT name, age FROM students WHERE age > 18;
SELECT name, age FROM students ORDER BY age DESC;

三、關鍵字說明
關鍵字 功能
SELECT 選擇要顯示的欄位
FROM 指定要查詢的資料表
WHERE 設定查詢條件(例如年齡 > 18)
ORDER BY 設定排序欄位與方向(ASC = 升冪、DESC = 降冪)
LIKE 模糊搜尋(例如找出名字中含有 “Li” 的學生)
四、ResultSet:Java 如何接收查詢結果

在 JDBC 中,執行 SELECT 查詢後會回傳一個 ResultSet 物件。
這個物件就像「查詢結果的游標」,可以逐列(row)讀出資料。

邏輯流程:
1.送出查詢語句(例如 SELECT * FROM students)
2.資料庫回傳結果集(ResultSet)
3.Java 透過 while (rs.next()) 逐筆取出欄位值(例如 rs.getString("name")rs.getInt("age"))

五、查詢、搜尋與排序三種常見操作
列出所有學生(List Students)

讓 SQL 一次選出全部學生並依 id 排序:

SELECT name, age FROM students ORDER BY id;

搜尋學生(Search)
找出名字中包含 「Li」 的學生:
SELECT name, age FROM students WHERE name LIKE '%Li%';

代表任意字串。
這樣可以搜尋 “Li”、 “Lily”、 “William” 等。
排序(Order By)

按名字排序:
SELECT * FROM students ORDER BY name ASC;

按年齡降序排序:

SELECT * FROM students ORDER BY age DESC, name ASC;

多欄排序可以用「逗號」連接,例如先比年齡、再比名字。

六、為什麼要交給資料庫處理?
做法 優點 缺點
用 Java 排序 實作簡單、控制自由 效能差、要把整份資料拉回來
用 SQL ORDER BY 效率高、可直接限制筆數、減少傳輸 要會寫 SQL 語法

資料庫的排序與搜尋在底層是經過索引優化的。
對於幾百、幾千筆資料,速度通常是 Java 手動排序的數十倍以上。

八、學習重點整理
SELECT 用來查詢資料
WHERE 限制條件(篩選資料)
ORDER BY 排序(ASC 升冪、DESC 降冪)
LIKE 模糊搜尋
ResultSet Java 端讀取查詢結果的容器
分層架構 查詢邏輯寫在 SqliteStudentRepository,而非 StudentManager


上一篇
Day 22:看到.db檔的內容跟學 SQL CRUD 操作順便把 add / delete / update 改寫成 SQL
系列文
Java 學生管理系統:打造可新增、刪除、修改、搜尋並保存資料的完整 CLI 應用23
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言