SQL WHERE: фильтрация строк в запросах SELECT
Урок 2.2 · Время чтения: ~6 мин · Задачи для практики ↓
Условие WHERE в SQL фильтрует строки таблицы, проверяя каждую запись на соответствие условию - возвращаются только те строки, для которых условие истинно. В этом уроке вы изучите операторы сравнения, BETWEEN, IN, поиск по шаблону LIKE и правильный способ работы с NULL-значениями.
Оператор SELECT сам по себе возвращает все строки из таблицы. В реальных задачах обычно нужно только подмножество данных, соответствующее определённым критериям - именно для этого и служит условие WHERE.
Что такое условие WHERE в SQL?
Условие WHERE фильтрует записи до того, как они попадают в результат. Только строки, для которых условие истинно, включаются в результирующий набор.
Базовый синтаксис
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Условие - это выражение, возвращающее true, false или unknown (когда задействованы NULL-значения). Возвращаются только строки, для которых условие равно true.
Операторы сравнения SQL в WHERE
SQL предоставляет набор операторов для сравнения значений в условии WHERE:
| Оператор | Описание | Пример |
|---|---|---|
= | Равно | WHERE last_name = 'SMITH' |
<> или != | Не равно | WHERE store_id <> 1 |
> | Больше | WHERE rental_rate > 2.99 |
< | Меньше | WHERE length < 60 |
>= | Больше или равно | WHERE replacement_cost >= 20.00 |
<= | Меньше или равно | WHERE amount <= 5.00 |
SELECT title, rental_rate, replacement_cost
FROM film
WHERE rental_rate = 4.99;
Результат: все фильмы со стоимостью аренды ровно $4.99.
Операторы BETWEEN, IN и LIKE в SQL
SQL включает мощные операторы для фильтрации по диапазону, списку и шаблону.
BETWEEN - фильтр по диапазону
Фильтрует значения в заданном диапазоне (включительно с обеих сторон).
SELECT payment_id, amount, payment_date
FROM payment
WHERE amount BETWEEN 5.00 AND 10.00;
Результат: платежи от $5.00 до $10.00 включительно.
IN - совпадение со списком
Проверяет вхождение значения в указанный список. Удобная замена нескольким условиям OR.
SELECT first_name, last_name, store_id
FROM customer
WHERE store_id IN (1, 2);
Результат: клиенты, принадлежащие магазину 1 или 2.
LIKE - поиск по шаблону
Ищет шаблон в текстовом столбце с использованием подстановочных знаков:
%- ноль, один или несколько произвольных символов._- ровно один символ.
-- Фильмы, название которых начинается на 'A'
SELECT title
FROM film
WHERE title LIKE 'A%';
-- Фильмы, у которых вторая буква названия 'I'
SELECT title
FROM film
WHERE title LIKE '_I%';
Как фильтровать NULL-значения в SQL
Проверить NULL через = или <> нельзя - такое сравнение всегда возвращает unknown, а не true. Для проверки на NULL используйте IS NULL или IS NOT NULL.
-- Неправильно: не вернёт ни одной строки
-- WHERE return_date = NULL
-- Правильно
SELECT rental_id, rental_date, return_date
FROM rental
WHERE return_date IS NULL;
Результат: все аренды, которые ещё не были возвращены.
Ключевые выводы:
- Условие
WHEREфильтрует строки до возврата результата. - Строки и даты заключаются в одинарные кавычки (
'SMITH'); числа кавычек не требуют. BETWEEN- включительный:BETWEEN 5 AND 10включает 5 и 10.IN- краткая альтернатива множеству условийOR.LIKEиспользует%(любая последовательность) и_(один символ).- Никогда не используйте
=сNULL- всегда используйтеIS NULLилиIS NOT NULL.
Часто задаваемые вопросы
В чём разница между WHERE и HAVING в SQL?
WHERE фильтрует строки до группировки и агрегации. HAVING фильтрует после - работает с результатами GROUP BY. Используйте WHERE для фильтрации отдельных строк, HAVING - для фильтрации агрегированных групп.
Можно ли использовать несколько условий в WHERE?
Да. Объединяйте условия с помощью AND (оба истинны), OR (хотя бы одно истинно) или NOT (отрицание). Используйте скобки для управления порядком вычисления.
Почему WHERE column = NULL не возвращает результатов?
Потому что NULL означает неизвестное значение - сравнение чего-либо с NULL через = всегда возвращает unknown, а не true или false. SQL требует IS NULL или IS NOT NULL для проверки отсутствия значения.