Фильтры WHERE: операторы сравнения и логики
Фильтруйте строки с помощью =, <>, , AND, OR и NOT, а также разберитесь с приоритетом операторов и скобками
«Фильтры WHERE: операторы сравнения и логики» — бесплатный урок SQL Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Роль WHERE
WHERE фильтрует строки до группировки или агрегации. Возвращаются только строки, для которых предикат имеет значение TRUE.
Операторы сравнения
Стандартные сравнения работают со всеми сопоставимыми типами:
SELECT * FROM products WHERE price > 100;
SELECT * FROM products WHERE price >= 100;
SELECT * FROM products WHERE price < 50;
SELECT * FROM products WHERE price <= 50;
SELECT * FROM products WHERE category = 'books';
SELECT * FROM products WHERE category <> 'books'; -- != also worksAND, OR, NOT
Объединяйте предикаты с помощью логических операторов:
-- Both true:
SELECT * FROM products
WHERE category = 'books' AND price < 50;
-- Either true:
SELECT * FROM products
WHERE category = 'books' OR category = 'music';
-- Negation:
SELECT * FROM products
WHERE NOT (category = 'books');Приоритет операторов
Приоритет (от высокого к низкому): NOT → AND → OR. Для ясности всегда заключайте сложные предикаты в скобки:
-- Without parens — almost certainly wrong:
SELECT * FROM orders
WHERE status = 'open' OR status = 'pending' AND total > 100;
-- means: status = open OR (status = pending AND total > 100)
-- With parens — clearer:
SELECT * FROM orders
WHERE (status = 'open' OR status = 'pending') AND total > 100;IN и NOT IN
Сокращённая запись для множества операторов OR:
SELECT * FROM users
WHERE country IN ('US', 'CA', 'GB', 'AU');
-- Equivalent to:
SELECT * FROM users
WHERE country = 'US' OR country = 'CA' OR country = 'GB' OR country = 'AU';BETWEEN
Проверка вхождения в диапазон с включением границ:
SELECT * FROM orders
WHERE total BETWEEN 100 AND 500;
-- Equivalent to: total >= 100 AND total <= 500Фильтры с безопасной обработкой NULL
Сравнения с NULL дают NULL, а не FALSE, и строки с NULL удаляются оператором WHERE. При необходимости явно используйте IS NULL / IS NOT NULL:
-- Returns users where deleted_at is unknown:
SELECT * FROM users WHERE deleted_at IS NULL;
-- IS DISTINCT FROM treats NULL as a comparable value:
SELECT * FROM events WHERE status IS DISTINCT FROM 'closed';Столбцы BOOLEAN
Для столбца BOOLEAN сравнение не требуется:
SELECT * FROM tasks WHERE done; -- = TRUE
SELECT * FROM tasks WHERE NOT done; -- = FALSE or NULL
SELECT * FROM tasks WHERE done IS NOT TRUE; -- FALSE or NULL onlyСопоставление с шаблоном с помощью LIKE
% соответствует любой строке, а _ — ровно одному символу:
SELECT * FROM users WHERE email LIKE '%@gmail.com';
SELECT * FROM products WHERE sku LIKE 'A_-___';
-- Case-insensitive in PostgreSQL:
SELECT * FROM users WHERE email ILIKE '%@GMAIL.com';Фильтры и производительность
Именно в предложениях WHERE индексы проявляют свои преимущества. Фильтры по равенству (=) и диапазону (<, BETWEEN) для индексированных столбцов превращают полное сканирование таблицы в поиск за миллисекунды.
Порядок вычисления
Логически база данных выполняет операции в таком порядке: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT. Поэтому WHERE видит исходные строки, а псевдонимы столбцов из SELECT ещё не определены.
-- This fails — alias not visible in WHERE:
SELECT total * 0.9 AS discounted
FROM orders WHERE discounted > 100; -- ERROR
-- Repeat the expression instead, or wrap in a subquery.Итоги
WHERE — Ваш основной инструмент для выбора строк.
- Стандартные операторы сравнения и логические операторы
- Заключайте смешанные условия AND/OR в скобки
- Используйте IS NULL — никогда не используйте = NULL
- WHERE для индексированных столбцов работает быстро
Быстрая проверка
Какой предикат оставляет только строки, где возраст больше или равен 18, а страна — US?
Изучай SQL с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 46
- Уроки
- 183
Часто задаваемые вопросы
Урок «Фильтры WHERE: операторы сравнения и логики» бесплатный?
Да — полный текст урока «Фильтры WHERE: операторы сравнения и логики» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Фильтры WHERE: операторы сравнения и логики»?
Фильтруйте строки с помощью =, <>, , AND, OR и NOT, а также разберитесь с приоритетом операторов и скобками Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Фильтры WHERE: операторы сравнения и логики»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Выбор столбцов и выражений
- Фильтры WHERE: операторы сравнения и логики
- ORDER BY для одного и нескольких столбцов
- Основы LIMIT, OFFSET и разбиения на страницы