В дополнение к операторам, описанным в предыдущих разделах, существуют три оператора над множествами, поддерживаемых языком Transact-SQL:
♦ union;
♦ intersect;
♦ except.
Оператор над множествами UNION
Результатом объединения (union) двух множеств является множество всех элементов, присутствующих в одном или обоих наборах. Соответственно, объединение двух таблиц является новой таблицей, содержащей все строки, присутствующие в одной или в обеих таблицах.
Общая форма оператора union:
select_l union [all] select_2 {[union [all] select_3]}...
Параметры seiect_i, seiect_2, ... - операторы select, которые составляют объединение. Если используется опция all, то все результирующие строки, включая дубликаты, будут отображаться. Опция all имеет в операторе union такое же значение, что и в списке выбора select. Существует только одно отличие: опция all в операторе select используется по умолчанию, а в операторе union для отображения всех результирующих строк, включая дубликаты, она должна задаваться явно.
База данных sample в ее первоначальной форме не подходит для демонстрации оператора union. По этой причине в данном разделе вводится новая таблица empioyee_enh, которая идентична таблице employee с добавлением в нее нового столбца domicile. Столбец domicile содержит место проживания каждого служащего.
Новая таблица empioyee_enh имеет следующую форму:
Создание таблицы empioyee_enh предоставляет возможность показать использование предложения into в операторе select. Оператор select into имеет две различные части. Во-первых, он создает новую таблицу со столбцами, соответствующими столбцам, перечисленным в списке выбора select. Во-вторых, он добавляет существующие строки из исходной таблицы в новую таблицу. (Имя новой таблицы появляется в предложении into, а имя исходной таблицы присутствует в предложении from оператора select.)
В примере 6.42 показано создание таблицы employeeenh.
В примере 6.42 оператор select into генерирует таблицу empioyee_enh и добавляет в нее все строки из исходной таблицы (employee). Под конец оператор alter table добавляет столбец domicile в таблицу employee_enh.
После выполнения примера 6.42 столбец domicile не содержит никаких значений. Значения могут быть добавлены при использовании SQL Server Management Studio или при помощи следующих операторов
update:
В примере 6.43 показано объединение таблиц employee_enh и department.
Две таблицы могут быть соединены при помощи оператора union, если они совместимы друг с другом. Это означает, что оба списка выбора select должны иметь одно и то же количество столбцов и соответствующие столбцы должны иметь совместимые типы данных. Например, integer и smallint являются совместимыми типами данных.
Упорядочение результата объединения может быть выполнено, только если предложение order by используется в последнем операторе select, как показано в примере 6.44. Предложения group by и having могут быть использованы в отдельных операторах select, но не в самом объединении.
Вместо оператора union можно использовать оператор or, если все операторы select, связанные с одним или более операторами union, ссылаются на одну и ту же таблицу. В этом случае множество операторов select заменяется одним оператором select с множеством операторов or.