Перейти к содержанию

Операции над множествами: UNION, INTERSECT и EXCEPT

Начало урока

Операции над множествами: UNION, INTERSECT и EXCEPT

Складывайте, пересекайте и вычитайте целые наборы результатов - не столбцы, а строки целиком

Главная идея: Операция над множествами берёт строки, полученные двумя запросами SELECT, и объединяет их по вертикали. JOIN склеивает таблицы бок о бок, делая строки шире; операция над множествами ставит наборы результатов друг под друга, образуя один более длинный список. UNION объединяет их, INTERSECT оставляет только строки, присутствующие в обоих наборах, а EXCEPT оставляет строки первого набора, которых нет во втором.
К концу урока вы сможете:
  • объединять два набора результатов с помощью UNION и понимать, когда вместо него нужен UNION ALL,
  • находить строки, общие для двух запросов, с помощью INTERSECT,
  • вычитать один набор результатов из другого с помощью EXCEPT,
  • соблюдать правила совместимости столбцов, которых требует любая операция над множествами,
  • воспроизводить INTERSECT и EXCEPT на старых версиях MySQL, где их нет (до 8.0.31).

1. Наша учебная база данных

Каждый запрос ниже работает с двумя небольшими таблицами. Компания ведёт список своих сотрудников (employees) и отдельно список клиентов (customers). В обеих записях хранятся имя человека и его город.

CREATE TABLE employees (
    emp_id  INT PRIMARY KEY,
    name    VARCHAR(50),
    city    VARCHAR(50)
);

CREATE TABLE customers (
    cust_id INT PRIMARY KEY,
    name    VARCHAR(50),
    city    VARCHAR(50)
);

INSERT INTO employees (emp_id, name, city) VALUES
    (1, 'Alice', 'London'),
    (2, 'Bob',   'Paris'),
    (3, 'Carol', 'London'),
    (4, 'David', 'Berlin');

INSERT INTO customers (cust_id, name, city) VALUES
    (101, 'Emma',  'Paris'),
    (102, 'Frank', 'London'),
    (103, 'Grace', 'Paris'),
    (104, 'Alice', 'Madrid');

Держите эти восемь строк в голове. Обратите внимание на города: сотрудники живут в Лондоне, Париже и Берлине; клиенты - в Париже, Лондоне и Мадриде. Именно эти совпадения и различия и позволяют описывать операции над множествами.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя