🚀 Начался ноябрь! SQLtest.online остаётся бесплатным благодаря донатам таких людей, как вы. Помогите собрать сумму этого месяца пораньше, чтобы сайт работал без перебоев. Поддержать сейчас →
SQL код скопирован в буфер обмена

SQL WHERE: фильтрация строк в запросах SELECT

Урок 2.2 · Время чтения: ~6 мин · Задачи для практики ↓

Условие WHERE в SQL фильтрует строки таблицы, проверяя каждую запись на соответствие условию - возвращаются только те строки, для которых условие истинно. В этом уроке вы изучите операторы сравнения, BETWEEN, IN, поиск по шаблону LIKE и правильный способ работы с NULL-значениями.

Оператор SELECT сам по себе возвращает все строки из таблицы. В реальных задачах обычно нужно только подмножество данных, соответствующее определённым критериям - именно для этого и служит условие WHERE.

SQL WHERE: каждая строка таблицы проверяется условием, и возвращаются только строки, для которых оно истинно; операторы сравнения, BETWEEN, IN, LIKE и IS NULL

Что такое условие 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 для проверки отсутствия значения.

Попробуйте решить следующие задачи, чтобы закрепить материал этого урока.

  1. Длинные фильмы
  2. Поиск актеров по имени
  3. Выбрать сотрудников по условию
  4. Выбрать фильмы по описанию
  5. Список активных клиентов