EXISTS, INTERSECT и EXCEPT: задачи SQL на условия по множествам

SQL-практика: EXISTS, пересечение и разность множеств, условия «для всех» и ловушка NOT IN с NULL.

Состав подборки: 4 задачи на код, 1 вопрос с выбором ответа. Условия и формат проверки указаны на странице каждой задачи.

Разберите маленький пример

Пусть A = {1, 2, 3}, B = {2, 3, 4}. Пересечение — {2, 3}, а A без B — {1}. Повторная покупка одной категории не добавляет нового клиента в множество. Сначала сформулируйте условие на клиента, затем переводите его в операции над строками.

На что обратить внимание

  • EXISTS проверяет наличие подходящей строки, а не её количество.
  • Разность направлена: A EXCEPT B и B EXCEPT A отвечают на разные вопросы.
  • NOT IN с NULL в подзапросе может дать неожиданный результат из-за трёхзначной логики.
  • Для условия «купил все обязательные товары» учитывайте и случай пустого обязательного набора по условию задачи.

Порядок практики

  1. SQL: INTERSECT и EXCEPT — Покупатели обеих категорий — код.
  2. SQL: INTERSECT и EXCEPT — Участники SQL и Git без посещения Python — код.
  3. SQL: Коррелированные подзапросы и EXISTS — Клиенты с завершённым заказом от 1000 — код.
  4. SQL: Реляционное деление: условия «для всех» — Клиенты, купившие все обязательные товары — код.
  5. NOT IN и NULL в SQL: почему исчезли ожидаемые строки — выбор ответа.

Куда двигаться дальше

Эти упражнения взяты из базового и продвинутого маршрутов. Для дальнейшей практики — платный курс «Продвинутый SQL».

Сравните подход с соединениями таблиц.