Lọc và sắp xếp dữ liệu

Truy vấn cơ sở dữ liệu PostgreSQL trong Java

Miller Trujillo

Staff Software Engineer

Vì sao cần lọc và sắp xếp?

  • Hầu hết ứng dụng không hiển thị mọi bản ghi
  • Cần thu hẹp kết quả
  • Sắp xếp dữ liệu có ý nghĩa
  • Hiển thị từng phần dễ xem

$$

$$

$$

$$

  • WHERE, ORDER BY, LIMIT, OFFSET

Một hiệu sách trực tuyến

Truy vấn cơ sở dữ liệu PostgreSQL trong Java

Lọc với WHERE

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

pstmt.setInt(1, 2000); ResultSet rs = pstmt.executeQuery();
  • Dùng ký tự ? và bind với setInt()
  • Mã Java giữ nguyên, chỉ SQL thay đổi
Truy vấn cơ sở dữ liệu PostgreSQL trong Java

Có thể lọc trong Java thay thế không?

  • Lọc ngay tại cơ sở dữ liệu:
    • Giảm dữ liệu truyền tải ✅
    • Tránh tắc nghẽn mạng ✅
    • Hiệu năng tốt hơn ✅
  • Ngoại lệ: logic phức tạp (external APIs, AI models) 💡

Ẩn dụ gọi món ăn

Truy vấn cơ sở dữ liệu PostgreSQL trong Java

Sắp xếp với 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";
  • += nối thêm văn bản vào chuỗi SQL
  • ?: - toán tử ba ngôi (if-else gọn)
Truy vấn cơ sở dữ liệu PostgreSQL trong Java

Phân trang với LIMIT và OFFSET

  • LIMIT kiểm soát số hàng trả về
  • OFFSET bỏ qua một số hàng trước khi trả kết quả
  • ORDER BY đảm bảo kết quả nhất quán giữa các trang
String sql = "SELECT title FROM books ORDER BY title ASC LIMIT ? OFFSET ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, 10); // LIMIT: 10 sách mỗi trang pstmt.setInt(2, 20); // OFFSET: bỏ qua 20 hàng đầu ResultSet rs = pstmt.executeQuery();
Truy vấn cơ sở dữ liệu PostgreSQL trong Java

Cùng luyện tập nào!

Truy vấn cơ sở dữ liệu PostgreSQL trong Java

Preparing Video For Download...