3.4. Объединение (UNION)
В литературе [2]
рассматривалась реляционная операция "Объединение", позволяющая получить
отношение, состоящее из всех строк, входящих в одно или оба объединяемых
отношения. Но при этом исходные отношения или их объединяемые проекции
должны быть совместимыми по объединению. Для SQL это означает, что две
таблицы можно объединять тогда и только тогда, когда:
-
они имеют одинаковое число столбцов, например, m;
-
для всех 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