SELECT Имя, Адрес FROM Клиенты
UNION
SELECT Имя, Адрес FROM Контакты;
Возможно, что в обеих объединяемых таблицах, Клиенты и Контакты, имеются записи с одинаковыми парами значений в столбцах имя и Адрес. Однако в результатной таблице данного запроса повторений не будет, как если бы вы использовали оператор UNION DISTINCT.
Оператор UNION можно применять только таблицам, удовлетворяющим следующим условиям совместимости:
- количества столбцов объединяемых таблиц должны быть равны;
-данные в соответствующих столбцах объединяемых таблиц должны иметь совместимые типы. Например, символьные (строковые) типы char и varchar совместимы, а числовой и строковый типы не совместимы.
Обратите внимание, что имена соответствующих столбцов и их размеры могут быть различными. Важно, чтобы количества столбцов были равны, а их типы были совместимы. Чтобы объединить наборы записей с несовместимыми по типу данных столбцами, следует применить функцию преобразования типа данных cast (). Например, следующий запрос возвращает список имен клиентов, к которому добавлен список сумм заказов (не будем обсуждать практическую пользу или смысл такого списка):
SELECT Имя FROM Клиенты
UNION
SELECT СAST(Сумма__заказа AS CHAR (10)) FROM Клиенты;
Когда требуется объединить записи двух таблиц, имеющих одноименные столбцы с совместимыми типами, можно использовать оператор UNION CORRESPONDING (объединение соответствующих):
SELECT * FROM Таблица1
UNION CORRESPONDING (списокСтолбцов)
SELECT * FROM Таблица2;
После ключевого слова CORRESPONDING можно указать столбцы, имеющиеся одновременно в обеих таблицах. Если этот список столбцов не указан, то предполагается список всех имен. При этом возможны недоразумения.
èПример:
Пусть требуется получить сведения о том, в какие пункты можно попасть, сделав не более одной пересадки (т. е. без пересадок или с одной пересадкой). Для этого достаточно объединить записи исходной таблицы Рейсы с результатом запроса о достижимости через один промежуточный пункт:
SELECT НАЧАЛЬНЫЙ_ПУНКТ, КОНЕЧНЫЙ_ПУНКТ FROM Рейсы
UNION
SELECT Т1.НАЧАЛЬНЫЙ_ПУНКТ, Т2.КОНЕЧНЫЙ_ПУНКТ FROM Рейсы Т1, Рейсы Т2
WHERE Т1.КОНЕЧНЫЙ_ПУНКТ=Т2.НАЧАЛЬНЫЙ_ПУНКТ;
Результат данного запроса показан на рис. слева.
Аналогичным образом можно сформулировать запрос о достижимости пунктов, в которые можно попасть посредством не более двух, трех и т. д. пересадок.
Рассмотренный запрос возвращает сведения о достижимости пунктов из всех возможных начальных пунктов. А если нам нужны сведения о достижимости только из одного пункта, например, А?
В этом случае достаточно добавить еще одно условие в оператор WHERE:
SELECT НАЧАЛЬНЫЙ_ПУНКТ, КОНЕЧНЫЙ_ПУНКТ FROM Рейсы
UNION
SELECT Т1. НАЧАЛЬНЫЙ, ПУНКТ, Т2.КОНЕЧНЫЙ_ПУНКТ
FROM Рейсы Т1, Рейсы Т2
WHERE T1.КОНЕЧНЫЙ_ПУНКТ = Т2.НАЧАЛЬНЫЙ_ПУНКТ
AND T1.НАЧАЛЬНЫЙ_ПУНКТ = 'А';