Современные базы данных строятся на строгих математических принципах реляционной алгебры. Именно она определяет, как можно выбирать, фильтровать и объединять данные. В предыдущих темах мы разбирали унарные операции — SELECT (выборка строк) и PROJECT (выбор столбцов).
Сегодня речь пойдёт о первой бинарной операции, то есть такой, что работает сразу с двумя таблицами — объединении (Union).
🔹 Что такое операция Union
Операция Union позволяет объединить содержимое двух таблиц (отношений) в одну, создавая новое множество строк, в котором все дубликаты удаляются.
Если обратиться к истокам — теории множеств, объединение двух множеств A и B включает все элементы, которые встречаются хотя бы в одном из них.
Например:
- Множество
A = {1, 2, 3} - Множество
B = {3, 4, 5} - Тогда
A ∪ B = {1, 2, 3, 4, 5}
Элемент 3 встречается в обоих множествах, но в результате он появляется только один раз — ведь множество по определению не содержит повторов.
Аналогичный принцип действует и для баз данных:
- вместо множеств — таблицы (отношения),
- вместо элементов — строки (кортежи).
Результат R ∪ S — это новая таблица, содержащая все уникальные строки, которые присутствовали хотя бы в одной из исходных таблиц R или S.
🔹 Условия совместимости таблиц для Union
Реляционная алгебра — дисциплина строгая. Нельзя просто взять и объединить любые две таблицы. Чтобы операция Union была выполнима, таблицы должны быть совместимы по объединению (union compatible).
Эта совместимость определяется двумя правилами:
1. Одинаковая арность
Ардность — это количество столбцов (атрибутов) в таблице.
Обе таблицы должны иметь одинаковое число столбцов.
Пример:
- ✅ Таблицы
Студенты (ID, Имя)иПреподаватели (ID, Имя)можно объединить — по два столбца в каждой. - ❌ Таблицы
Студенты (ID, Имя)иКурсы (ID, Название, Кредиты)объединить нельзя — во второй таблице три столбца.
2. Совместимость доменов
Домены — это типы данных в соответствующих столбцах.
У каждой пары столбцов с одинаковым порядком должны быть совместимые типы данных.
Например:
- ✅ Таблицы
Активные_клиенты (ID: integer, Имя: string)иНовые_клиенты (Client_ID: integer, Full_Name: string)совместимы. - ❌ Таблицы
Сотрудники (ID: integer, Дата_найма: date)иОтделы (Dept_ID: integer, Название: string)несовместимы, потому чтоdateиstringнельзя объединить.
Важно: названия столбцов роли не играют. Сравнение происходит по порядку, количеству и типам данных.
🔹 Синтаксис операции Union
Формально операция записывается так:
R ∪ S
где:
R— первая таблица (отношение),S— вторая таблица.
Результатом будет новая таблица, которая не изменяет исходные данные.
🔹 Пример объединения таблиц
Представим базу данных университета.
Есть две таблицы:
Студенты третьего курса
| ID | Имя | Специальность |
|---|---|---|
| 101 | Анна | Математика |
| 102 | Олег | Физика |
| 105 | Виктор | Информатика |
Студенты четвёртого курса
| ST_ID | Fame | Major |
|---|---|---|
| 103 | Мария | Биология |
| 104 | Павел | Химия |
| 105 | Виктор | Информатика |
Обе таблицы содержат три столбца, типы данных совпадают, значит, они совместимы.
После выполнения операции:
Студенты_3курс ∪ Студенты_4курс
мы получаем:
| ID | Имя | Специальность |
|---|---|---|
| 101 | Анна | Математика |
| 102 | Олег | Физика |
| 103 | Мария | Биология |
| 104 | Павел | Химия |
| 105 | Виктор | Информатика |
Строка с Виктором была в обеих таблицах, но в результате присутствует только один раз — дубликаты устранены автоматически.
🔹 Ошибки при объединении таблиц
Ошибка 1. Несовпадение количества столбцов
Сотрудники (ID, Имя, Зарплата)
Отделы (Dept_ID, Название)
Три столбца против двух — операция невозможна.
Ошибка 2. Несовместимость типов данных
Продукты (Prod_ID: integer, Цена: float)
Поставщики (Sub_ID: integer, Город: string)
Ардность совпадает, но типы данных нет: float ≠ string.
Результат — ошибка совместимости доменов.
🔹 Операция Union в SQL
В языке SQL эквивалентом реляционной операции Union является оператор UNION.
SELECT ID, Имя, Специальность FROM Студенты3
UNION
SELECT ST_ID, Fame, Major FROM Студенты4;
Такой запрос:
- Выполняет оба
SELECTотдельно, - Проверяет количество и типы столбцов,
- Объединяет результаты,
- Удаляет дубликаты.
Разница между UNION и UNION ALL
UNION— удаляет дубликаты (строго по правилам реляционной алгебры).UNION ALL— просто склеивает данные без проверки на уникальность.
UNION ALL работает быстрее, но использовать его нужно только тогда, когда точно известно, что пересечений нет или они нужны для анализа.
🔹 Заключение
Операция Union — ключевой инструмент реляционной алгебры, который позволяет объединять таблицы с одинаковой структурой.
Основные принципы:
- Работает только с совместимыми таблицами — одинаковое количество столбцов и совместимые типы данных.
- Удаляет дубликаты, так как основана на теории множеств.
- В SQL ей соответствует оператор UNION.
Понимание Union — важный шаг к созданию сложных запросов и объединению данных из разных частей базы.
