篩選與排序資料

在 Java 中查詢 PostgreSQL 資料庫

Miller Trujillo

Staff Software Engineer

為何要篩選與排序?

  • 多數應用不會顯示所有紀錄
  • 需要縮小結果範圍
  • 有意義地整理資料
  • 顯示可管理的分頁

$$

$$

$$

$$

  • WHEREORDER BYLIMITOFFSET

線上書店

在 Java 中查詢 PostgreSQL 資料庫

用 WHERE 篩選

String sql = "SELECT * FROM books WHERE publication_year > ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, 2000); ResultSet rs = pstmt.executeQuery();
  • 使用 ? 佔位符,搭配 setInt() 綁定
  • Java 程式碼不變,只改 SQL
在 Java 中查詢 PostgreSQL 資料庫

可以改在 Java 端篩選嗎?

  • 在資料庫端篩選:
    • 減少傳輸資料量 ✅
    • 避免網路壅塞 ✅
    • 提升效能 ✅
  • 例外:複雜邏輯(外部 API、AI 模型)💡

點餐類比

在 Java 中查詢 PostgreSQL 資料庫

用 ORDER BY 排序

String sql = "SELECT title, publication_year FROM books
WHERE category_id = ? ORDER BY publication_year DESC";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 3);
ResultSet rs = pstmt.executeQuery();
// Adding dynamic behavior
boolean desc = true;
String sql = "SELECT title, publication_year FROM books
WHERE category_id = ? ORDER BY publication_year ";

sql += desc ? "DESC" : "ASC";
  • += 將文字附加到 SQL 字串
  • ?: 三元運算子(精簡 if-else)
在 Java 中查詢 PostgreSQL 資料庫

用 LIMIT 與 OFFSET 分頁

  • LIMIT 控制回傳列數
  • OFFSET 在回傳前略過前面列
  • ORDER BY 確保各頁結果一致
String sql = "SELECT title FROM books ORDER BY title ASC LIMIT ? OFFSET ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, 10); // LIMIT: 10 books per page pstmt.setInt(2, 20); // OFFSET: skip first 20 rows ResultSet rs = pstmt.executeQuery();
在 Java 中查詢 PostgreSQL 資料庫

一起來練習吧!

在 Java 中查詢 PostgreSQL 資料庫

Preparing Video For Download...