IN и NOT IN — проверка принадлежности к списку
Зачем это нужно
Нужно выбрать товары из нескольких категорий: книги, спорт и продукты.
Можно написать три условия через OR, но если категорий 10 — это очень длинно.
IN позволяет перечислить допустимые значения компактно.
Аналогия с Excel
В Excel фильтр с множественным выбором: поставили галочки напротив «Книги»,
«Спорт», «Продукты» — отобразились только они. IN делает то же самое.
Синтаксис
WHERE колонка IN (значение1, значение2, значение3, ...)
Разбор примеров
-- Книги, спортивные товары и продукты
SELECT name, category, price
FROM products
WHERE category IN ('Книги', 'Спорт', 'Продукты')
ORDER BY category, price;
-- То же самое через OR — длиннее и хуже читается
SELECT name, category, price
FROM products
WHERE category = 'Книги'
OR category = 'Спорт'
OR category = 'Продукты'
ORDER BY category, price;
Оба запроса — одинаковый результат. IN — элегантнее.
NOT IN — исключить несколько значений
-- Всё кроме электроники и прочего
SELECT name, category
FROM products
WHERE category NOT IN ('Электроника', 'Прочее')
ORDER BY category, name;
NOT IN — противоположность: строки где значение не входит в список.
IN с числами
-- Товары с конкретными id
SELECT name, price
FROM products
WHERE id IN (1, 5, 10, 15)
ORDER BY id;
Работает с любым типом данных.
Ловушка: NOT IN с NULL
Если в списке NOT IN есть NULL — результат будет пустым. Это особенность
SQL: сравнение с NULL всегда неопределено. На практике: не передавайте NULL
в NOT IN.
Частые ошибки
Забыли скобки — WHERE category IN 'Книги', 'Спорт' — синтаксическая ошибка.
Список значений обязательно в круглых скобках: IN ('Книги', 'Спорт').
IN с одним значением — WHERE category IN ('Книги') работает, но лучше
написать WHERE category = 'Книги' — понятнее.
AND вместо IN — WHERE category = 'Книги' AND category = 'Спорт' — пустой
результат. Для нескольких значений одной колонки нужен IN или OR.
Запомни
IN (a, b, c) — то же что = a OR = b OR = c. NOT IN — исключает список.
Список всегда в круглых скобках.
Мини-практика
Перепиши через IN или NOT IN:
category = 'Книги' OR category = 'Одежда'category != 'Книги' AND category != 'Спорт'id = 1 OR id = 2 OR id = 3
Ответы
category IN ('Книги', 'Одежда')category NOT IN ('Книги', 'Спорт')id IN (1, 2, 3)
Прочитайте урок до конца — прогресс засчитается автоматически