Ответ
Оператор WHERE определяет условие для фильтрации строк, выбираемых из таблицы (или нескольких таблиц) в операторах SELECT, UPDATE, DELETE. Он выполняется до любых операций группировки или агрегации.
Основное применение в Java-экосистеме:
-
Нативный SQL (JDBC):
String sql = "SELECT * FROM products WHERE category = ? AND price > ?"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, "Electronics"); // Безопасная подстановка параметров stmt.setBigDecimal(2, new BigDecimal("100.00")); ResultSet rs = stmt.executeQuery(); -
JPA (Java Persistence API) / Hibernate (JPQL или Criteria API):
// JPQL (работает с сущностями, а не таблицами) TypedQuery<Product> query = em.createQuery( "SELECT p FROM Product p WHERE p.category = :cat AND p.price > :minPrice", Product.class ); query.setParameter("cat", "Electronics"); query.setParameter("minPrice", 100.0); List<Product> results = query.getResultList(); -
Spring Data JPA (Derived Queries или
@Query):// Автогенерируемый метод по имени List<User> findByLastNameAndActiveTrue(String lastName); // Явный запрос с @Query @Query("SELECT u FROM User u WHERE u.email LIKE %:domain") List<User> findUsersByEmailDomain(@Param("domain") String domain);
Типы условий в WHERE:
- Сравнение:
=,<>,>,<,>=,<= - Логические операторы:
AND,OR,NOT - Проверка на NULL:
IS NULL,IS NOT NULL - Вхождение в набор:
IN (value1, value2, ...) - Диапазон значений:
BETWEEN value1 AND value2 - Сопоставление с шаблоном:
LIKE 'pattern%'(с%и_)
Best Practice: Всегда используйте параметризованные запросы (PreparedStatement в JDBC, именованные параметры в JPA) вместо конкатенации строк, чтобы предотвратить SQL-инъекции.