- •1. Использование оператора union
- •2. Включение или выключение повторяющихся строк
- •3. Сортировка результатов комбинированных запросов
- •Объединение “по вертикали” или операция union
- •Синтаксис
- •Правила использования
- •Применение
- •Примеры Использование union при выборке из двух таблиц[править | править вики-текст]
- •Использование union all при выборке из двух таблиц[править | править вики-текст]
- •Использование union при выборке из одной таблицы[править | править вики-текст]
- •Использование union как внешнее объединение[править | править вики-текст]
- •Синтаксис
- •Аргументы
- •Примеры а.Использование простого union
- •Б.Использование select into с union
- •В.Использование union двух инструкций select с order by
- •Г.Использование union трех инструкций select для демонстрации эффекта от использования скобок и all
Использование union all при выборке из двух таблиц[править | править вики-текст]
Применение UNION ALL дает другой результат, так как дубликаты не скрываются. Выполнение запроса:
(SELECT * FROM sales2005)
UNION ALL
(SELECT * FROM sales2006);
даст следующий результат, выводимый без упорядочивания ввиду отсутствия выражения ORDER BY:
person |
amount |
Иван |
1000 |
Иван |
2000 |
Алексей |
2000 |
Алексей |
2000 |
Сергей |
5000 |
Петр |
35000 |
Использование union при выборке из одной таблицы[править | править вики-текст]
Аналогичным образом можно объединять два разных запроса из одной и той же таблицы (хотя вместо этого, как правило, необходимые параметры комбинируют в одном запросе при помощи ключевых слов AND и OR в условии WHERE):
(SELECT person, amount FROM sales2005 WHERE amount=1000)
UNION
(SELECT person, amount FROM sales2005 WHERE person like 'Сергей');
В результате получится:
person |
amount |
Иван |
1000 |
Сергей |
5000 |
Использование union как внешнее объединение[править | править вики-текст]
При помощи UNION можно создавать также полные внешние объединения (иногда используется в случае отсутствия встроенной прямой поддержки внешних объединений):
(SELECT *
FROM employee
LEFT JOIN department
ON employee.DepartmentID = department.DepartmentID)
UNION
(SELECT *
FROM employee
RIGHT JOIN department
ON employee.DepartmentID = department.DepartmentID);
Но при этом необходимо помнить, что это все же не одно и то же, что и оператор JOIN.
UNION (Transact-SQL)
SQL Server 2014
Объединяет результаты двух или более запросов в один результирующий набор, в который входят все строки, принадлежащие всем запросам в объединении. Операция UNION отличается от соединений столбцов из двух таблиц.
Ниже приведены основные правила объединения результирующих наборов двух запросов с помощью операции UNION:
Количество и порядок столбцов должны быть одинаковыми во всех запросах.
Типы данных должны быть совместимыми.
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск). |
Cинтаксические
обозначения в Transact-SQL
Синтаксис
{ <query_specification> | ( <query_expression> ) }
UNION [ ALL ]
<query_specification | ( <query_expression> )
[ UNION [ ALL ] <query_specification> | ( <query_expression> )
[ ...n ] ]
Аргументы
<query_specification> | ( <query_expression> )
Спецификация запроса или выражение запроса, возвращающее данные для объединения с данными из другой спецификации запроса или выражения запроса. Определения столбцов, которые являются частью операции UNION, не должны совпадать, однако должны быть совместимыми посредством неявного преобразования. Если типы данных различаются, то получившийся тип данных определяется на основе правил очередности типов данных. Если типы совпадают, но различаются в точности, масштабе или длине, результат определяется на основе правил, используемых для объединения выражений. Дополнительные сведения см. в разделе Точность, масштаб и длина (Transact-SQL).
Столбцы типа данных xml должны быть эквивалентны. Все столбцы должны либо иметь тип, определенный в XML-схеме, либо быть нетипизированными. Типизированные столбцы должны относиться к одной и той же коллекции XML-схем.
UNION
Указывает на то, что несколько результирующих наборов следует объединить и возвратить в виде единого результирующего набора.
ALL
Объединяет в результирующий набор все строки. Это относится и к дублирующимся строкам. Если опущено, дубликаты строк удаляются.
