การกรองและเรียงลำดับข้อมูล

การคิวรีฐานข้อมูล PostgreSQL ด้วย Java

Miller Trujillo

Staff Software Engineer

ทำไมต้องกรองและเรียงลำดับ?

  • แอปพลิเคชันส่วนใหญ่ไม่แสดงข้อมูลทุกรายการ
  • ต้องกรองผลลัพธ์ให้แคบลง
  • จัดระเบียบข้อมูลให้มีความหมาย
  • แสดงข้อมูลในปริมาณที่จัดการได้

$$

$$

$$

$$

  • WHERE, ORDER BY, LIMIT, OFFSET ✨

ร้านหนังสือออนไลน์

การคิวรีฐานข้อมูล PostgreSQL ด้วย Java

การกรองด้วย 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
การคิวรีฐานข้อมูล PostgreSQL ด้วย Java

กรองใน Java แทนได้ไหม?

  • การกรองที่ฐานข้อมูล:
    • ลดปริมาณข้อมูลที่ถ่ายโอน ✅
    • ป้องกันความแออัดของเครือข่าย ✅
    • ประสิทธิภาพดีขึ้น ✅
  • ข้อยกเว้น: ตรรกะซับซ้อน (API ภายนอก, โมเดล AI) 💡

การเปรียบเทียบกับการสั่งอาหาร

การคิวรีฐานข้อมูล PostgreSQL ด้วย Java

การเรียงลำดับด้วย 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
  • ?: - ternary operator (if-else แบบย่อ)
การคิวรีฐานข้อมูล PostgreSQL ด้วย Java

การแบ่งหน้าด้วย 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();
การคิวรีฐานข้อมูล PostgreSQL ด้วย Java

มาฝึกกันเถอะ!

การคิวรีฐานข้อมูล PostgreSQL ด้วย Java

Preparing Video For Download...