SQLLab
Теория· 7 мин· 10 XP

IN и NOT IN — проверка принадлежности к списку

Зачем это нужно

Нужно выбрать товары из нескольких категорий: книги, спорт и продукты. Можно написать три условия через OR, но если категорий 10 — это очень длинно. IN позволяет перечислить допустимые значения компактно.

Аналогия с Excel

В Excel фильтр с множественным выбором: поставили галочки напротив «Книги», «Спорт», «Продукты» — отобразились только они. IN делает то же самое.

Синтаксис

sql
WHERE колонка IN (значение1, значение2, значение3, ...)

Разбор примеров

sql
-- Книги, спортивные товары и продукты
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 — исключить несколько значений

sql
-- Всё кроме электроники и прочего
SELECT name, category
FROM products
WHERE category NOT IN ('Электроника', 'Прочее')
ORDER BY category, name;

NOT IN — противоположность: строки где значение не входит в список.

IN с числами

sql
-- Товары с конкретными 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:

  1. category = 'Книги' OR category = 'Одежда'
  2. category != 'Книги' AND category != 'Спорт'
  3. id = 1 OR id = 2 OR id = 3
Ответы
  1. category IN ('Книги', 'Одежда')
  2. category NOT IN ('Книги', 'Спорт')
  3. id IN (1, 2, 3)

Прочитайте урок до конца — прогресс засчитается автоматически