データのフィルタリングとソート

Java で PostgreSQL データベースにクエリを実行する

Miller Trujillo

Staff Software Engineer

なぜフィルタリングとソートが必要か?

  • ほとんどのアプリは全レコードを表示しません
  • 結果を絞り込む必要があります
  • データを意味のある形に整理します
  • 扱いやすい単位で表示します

$$

$$

$$

$$

  • WHERE、ORDER BY、LIMIT、OFFSET ✨

オンライン書店

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...