Фильтрация и сортировка данных

Работа с базой данных 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, модели ИИ) 💡

Аналогия с заказом еды

Работа с базой данных 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
  • ?: — тернарный оператор (компактный 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...