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.НАЧАЛЬНЫЙ_ПУНКТ;

SELECT Имя, Адрес FROM Клиенты - student2.ru Результат данного запроса показан на рис. слева.

Аналогичным образом можно сформулировать запрос о дости­жимости пунктов, в которые можно попасть посредством не бо­лее двух, трех и т. д. пересадок.

Рассмотренный запрос возвращает сведения о достижимости пунктов из всех возможных начальных пунктов. А если нам нужны сведения о достижимости только из одного пункта, например, А?

В этом случае достаточно добавить еще одно условие в оператор WHERE:

SELECT НАЧАЛЬНЫЙ_ПУНКТ, КОНЕЧНЫЙ_ПУНКТ FROM Рейсы

UNION

SELECT Т1. НАЧАЛЬНЫЙ, ПУНКТ, Т2.КОНЕЧНЫЙ_ПУНКТ

FROM Рейсы Т1, Рейсы Т2

WHERE T1.КОНЕЧНЫЙ_ПУНКТ = Т2.НАЧАЛЬНЫЙ_ПУНКТ

AND T1.НАЧАЛЬНЫЙ_ПУНКТ = 'А';

Наши рекомендации