3.4. Объединение (UNION)

В литературе [2] рассматривалась реляционная операция "Объединение", позволяющая получить отношение, состоящее из всех строк, входящих в одно или оба объединяемых отношения. Но при этом исходные отношения или их объединяемые проекции должны быть совместимыми по объединению. Для SQL это означает, что две таблицы можно объединять тогда и только тогда, когда:

1. они имеют одинаковое число столбцов, например, m;
2. для всех i (i = 1, 2, ..., m) i-й столбец первой таблицы и i-й столбец второй таблицы имеют в точности одинаковый тип данных.

Например, выдать названия продуктов, в которых нет жиров, либо входящих в состав блюда с кодом БЛ = 1:

| Результат: | Продукт
--- | --- | ---
    SELECT	Продукт
    FROM	Продукты
    WHERE	Жиры = 0
    UNION
    SELECT	Продукт
    FROM	Соста
    WHERE	БЛ = 1
Майонез
Лук
Помидоры
Зелень
Яблоки
Сахар

Из этого простого примера видно, что избыточные дубликаты всегда исключаются из результата UNION. Поэтому, хотя в рассматриваемом примере Помидоры, Зелень и Яблоки выбираются обеими из двух составляющих предложения SELECT, в окончательном результате они появляются только один раз.

Предложением с UNION можно объединить любое число таблиц (проекций таблиц). Так, к предыдущему запросу можно добавить (перед точкой с запятой) конструкцию

    UNION
    SELECT	Продукт
    FROM	Продукты
    WHERE	Ca < 250

позволяющую добавить к списку продуктов Масло, Рис, Мука и Кофе. Однако тот же результат можно получить простым изменением фразы WHERE первой части исходного запроса

    WHERE Жиры = 0  OR  Ca < 250

3.3.7 | Содержание | 3.5