SQL Оператор UNION. Sql union примеры


SQL Оператор UNION

Оператор SQL UNION объединяет результат двух или более заявлений на SELECT.

SQL UNION Оператор

Оператор UNION используется для объединения множества результатов двух или более заявлений на SELECT.

Обратите внимание на то, что каждый оператор ЗЕЬЕСТ внутри Союза должны иметь одинаковое число столбцов. Столбцы также должны иметь одинаковые типы данных. Кроме того, столбцы в каждом ЗЕЬЕСТ должны быть в том же самом порядке.

SQL UNION Синтаксис

SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2 ;

Note: Оператор UNION выбирает только различные значения по умолчанию. Чтобы разрешить повторяющиеся значения, используйте ключевое слово ALL с UNION.

SQL UNION ALL Синтаксис

SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2 ;

PS: Имена столбцов в результатах запросов, союзной, как правило , равны именам столбцов в первом ЗЕЬЕСТ в Союзе.

Демо-версия базы данных

В этом уроке мы будем использовать хорошо известную базу данных Борей.

Ниже приводится подборка из "Customers" таблицы:

Пользовательский ИД Имя Клиента Контактное лицо Адрес город Почтовый индекс Страна
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitucion 2222 Mexico D.F. 05021 Mexico
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Mexico D.F. 05023 Mexico

И выбор из "Suppliers" таблицы:

SupplierID Наименование поставщика Контактное лицо Адрес город Почтовый индекс Страна
1 Экзотические Liquid Шарлотта Купер 49 Гилберта St. Лондон EC1 4SD Великобритания
2 Новый Орлеан Cajun наслаждений Shelley Берк PO Box 78934 Жители Нового Орлеана 70117 США
3 Homestead Бабушка Келли Regina Мерфи 707 Oxford Rd. Ann Arbor 48104 США

SQL UNION Пример

Следующий SQL - оператор выбирает все различные города (только отдельные значения) от "Customers" и "Suppliers" таблиц:

Note: UNION не может быть использован для просмотра списка всех городов из двух таблиц. Если несколько клиентов и поставщиков, одни и те же города, каждый город будет указан только один раз. UNION выбирает только определенные значения. Использование UNION ALL также выбрать повторяющиеся значения!

SQL UNION ALL Пример

Следующий SQL - оператор использует UNION ALL для выбора всех (значения дубликатов) также городов от "Customers" и "Suppliers" таблиц:

SQL UNION ALL С WHERE

Следующий SQL - оператор использует UNION ALL для выбора всех (значения дубликатов) также немецкие города от "Customers" и "Suppliers" таблиц:

пример

SELECT City, Country FROM CustomersWHERE Country='Germany'UNION ALL SELECT City, Country FROM SuppliersWHERE Country='Germany'ORDER BY City;

Попробуй сам "

www.w3bai.com

Объяснение работы SQL UNION на примере диаграмм Венна - Базы данных, знаний и хранилища данных. Big data, СУБД и SQL и noSQL

The SQL UNION operator combines the results of two or more queries and makes a result set which includes fetched rows from the participating queries in the UNION.

Table of contents :

  • Basic Rules
  • Difference between SQL JOIN and UNION
  • SQL: UNION ALL
  • SQL: UNION ALL using where
  • SQL: UNION a table to itself
  • SQL: UNION with different column names
  • SQL: UNION with Inner Join
  • SQL: Union vs Union All

Basic rules for combining two or more queries using UNION

Basic rules for combining two or more queries using UNION :

1.) number of columns and order of columns of all queries must be same.

2.) the data types of the columns on involving table in each query must be same or compatible.

3.) Usually returned column names are taken from the first query.

By default the UNION behalves like UNION [DISTINCT] , i.e. eliminated the duplicate rows; however, using ALL keyword with UNION returns all rows, including duplicates.

Difference between SQL JOIN and UNION

1.) The columns of joining tables may be different in JOIN but in UNION the number of columns and order of columns of all queries must be same.

2.) The UNION puts rows from queries after each other( puts vertically ) but JOIN puts the column from queries after each other (puts horizontally), i.e. it makes a cartesian product.

Syntax

  1. SELECT <column_list>t [INTO ]  
  2. [FROM ]     [WHERE ]  
  3. [GROUP BY ]     [HAVING ]  
  4. [UNION [ALL]  
  5. SELECT <column_list>  
  6. [FROM ]     [WHERE ]  
  7. [GROUP BY ]     [HAVING ]...]  
  8. [ORDER BY ]  

The queries are all executed independently but their output is merged.

In the following example no clause have been added with UNION, so, by default UNION is acting as UNION [DISTINCT] and only the unique rows are available in the result set.

Sample table : product

Sample table : purchase

  1. SELECT prod_code,prod_name  
  2. FROM product  
  3. UNION   
  4. SELECT prod_code,prod_name  
  5. FROM purchase;  

Output

Pictorial Representation

Go Top

SQL UNION ALL

In the following example the optional clause ALL have been added with UNION for which, all the rows from each query have been available in the result set. Here in the above output the marking rows are non-unique but it has been displayed. If ignored ALL clause, the marking rows would have come once.

  1. SELECT prod_code,prod_name,com_name  
  2. FROM product  
  3. UNION ALL  
  4. SELECT prod_code,prod_name,com_name  
  5. FROM purchase;  

Output

SQL UNION ALL using where

In the following example the two queries have been set using two different criterias including WHERE clause. So all the retrieve rows (including duplicates) have displayed in the result set. Here in this example the marking rows are identical, but it has been displayed for the ALL clause along with UNION. If ignored ALL clause the marking rows would have come once.

  1. SELECT prod_code,prod_name,com_name  
  2. FROM product   
  3. WHERE life>6  
  4. UNION ALL  
  5. SELECT prod_code,prod_name,com_name  
  6. FROM purchase   
  7. WHERE pur_qty>10  

Output

Go Top

SQL UNION a table to itself

In the following example the two queries have been set using two different criterias for a same table. So all the retrieved rows ( including duplicates ) have displayed. Here in this example the marking rows are identical, but it has been displayed for the ALL clause along with UNION.

  1. SELECT prod_code,prod_name,com_name  
  2. FROM purchase   
  3. WHERE pur_qty>6  
  4. UNION ALL  
  5. SELECT prod_code,prod_name,com_name  
  6. FROM purchase   
  7. WHERE pur_amount>100000  

SQL UNION with different column names

In the following example the two queries have been set using two different criterias and different columns. The different columns in two statements are 'life' and 'pur_qty'. But as the data type are same for both the columns so, result have displayed. Usually returned column names are taken from the first query.

  1. SELECT prod_code,prod_name,life  
  2. FROM product  
  3. WHERE life>6  
  4. UNION  
  5. SELECT prod_code,prod_name,pur_qty  
  6. FROM purchase  
  7. WHERE pur_qty<20  

Output

Go Top

SQL UNION with Inner Join

In the following example the union made by two queries. The queries are two inner join statement. In the first query the join take place between two tables where the prod_code of both tables are same and in the 2nd query the join take place between two tables where the prod_name of both tables are same.

  1. SELECT product.prod_code,product.prod_name,  
  2. purchase.pur_qty, purchase.pur_amount    
  3. FROM product  
  4. INNER JOIN purchase    
  5. ON product.prod_code =purchase.prod_code  
  6. UNION  
  7. SELECT product.prod_code,product.prod_name,  
  8. purchase.pur_qty, purchase.pur_amount    
  9. FROM product  
  10. INNER JOIN purchase    
  11. ON product.prod_name =purchase.prod_name;  

Output

SQL: Union vs Union All

The basic difference between UNION and UNION ALL is, UNION removes duplicate records but UNION ALL does not. Let apply these two commands on two tables table1 and table2.

Rows in table1 :

Rows in table2 :

UNION Example (Removes all duplicate records) :

  1. select field1  
  2. from table1  
  3. UNION  
  4. select field1  
  5. from table2;  
  6.     

Output

UNION ALL Example :

  1. select field1  
  2. from table1  
  3. UNION ALL  
  4. select field1  
  5. from table2;  
  6.     

Output

Outputs of the said SQL statement shown here is taken by using Oracle Database 10g Express Edition.

 

 

Union all is also an SQL command which is used to put together the selected values from two different tables. Unlike the Union command, the Union all does not filter the values to be returned by it. Union all, as its name suggests, returns all the values specific to the query, inclusive of the values that have been duplicated as well. However, Union all works fairly faster than the Union command. This is because there is no onus on the Union all command to eliminate duplication and present distinct values. So it works faster and displays all results as per the query.

 

Therefore, the use of Union all is recommended only in a condition where the user is confident about the displayed result not carrying any overlapping values. Otherwise, the Union command is the best option to perform an integration of values. It is a bit slower, but can be counted upon to provide an accurate result.

 

Comparison between Union and Union All:

 

 

Union

Union All

Return of value

The union command returns values that are distinct from one another.

Union all displays all values specific to the query, inclusive of those that are being duplicated.

Elimination of duplicity

Union command always discards the duplicate values and presents the separate ones.

Union all doesn’t eliminate duplicate values.

Speed

Union is a bit slower as it refines the values to be returned.

Union all is comparatively faster as it just has to present all the values, regardless of clone values.

Recommended when

The values need to be sorted and united.

The values need to be united, but don’t need to be sorted.

intellect.ml

Union (SQL) - это... Что такое Union (SQL)?

Правильный заголовок этой статьи — UNION. Он показан некорректно из-за технических ограничений.

В языке SQL ключевое слово UNION применяется для объединения результатов двух SQL-запросов в единую таблицу, состоящую из схожих строк. Оба запроса должны возвращать одинаковое число столбцов и совместимые типы данных в соответствующих столбцах. Данный оператор был описан уже в самом первом стандарте SQL — SQL/89[1].

Синтаксис

Оператор указывается между запросами. В упрощенном виде это выглядит следующим образом:

<запрос1> UNION [ALL] <запрос2> UNION [ALL] <запрос3> .....;

По умолчанию любые дублирующие записи автоматически скрываются, если не использовано выражение UNION ALL.

Необходимо отметить, что UNION сам по себе не гарантирует порядок строк. Строки из второго запроса могут оказаться в начале, в конце или вообще перемешаться со строками из первого запроса. В случаях, когда требуется определенный порядок, необходимо использовать выражение ORDER BY.

Правила использования

Существуют два основных правила, регламентирующие порядок использования оператора UNION:

  • Число и порядок извлекаемых столбцов должны совпадать во всех объединяемых запросах;
  • Типы данных в соответствующих столбцах должны быть совместимы.

Определения столбцов, данные из которых извлекаются в объединяемых запросах, не должны совпадать, однако должны быть совместимыми путем неявного преобразования. Если типы данных различаются, то получившийся тип данных определяется на основе правил очередности типов данных (для конкретной СУБД). Если типы совпадают, но различаются в точности, масштабе или длине, результат определяется на основе правил, используемых для объединения выражений (для конкретной СУБД)[2]. Типы не определенные ANSI, такие как DATA и BINARY, обычно должны совпадать с другими столбцами такого же нестандартного типа[3].

В Microsoft SQL Server столбцы с типом данных XML должны быть эквивалентными. Все столбцы должны либо иметь тип, определенный в XML-схеме, либо быть нетипизированными. Типизированные столбцы должны относиться к одной и той же коллекции XML-схем[2].

Еще одно ограничение на совместимость — это запрет пустых значений (NULL) в любом столбце объединения, причем эти значения необходимо запретить и для всех соответствующих столбцов в других запросах объединения, поскольку пустые значения (NULL) запрещены с ограничением NOT NULL. Кроме того, нельзя использовать UNION в подзапросах, а также нельзя использовать агрегатные функции в предложении SELECT запроса в объединении (однако большинство СУБД пренебрегают этими ограничениями)[3].

Применение

UNION может быть весьма полезным в приложениях для хранения данных, где таблицы редко бывают абсолютно нормализированы. Простой пример: в базе есть таблицы sales2005 и sales2006, обладающие идентичной структурой, но разделены ради повышения производительности. Запрос со словом UNION позволяет объединить результаты из обеих таблиц.

Также стоит отметить, что UNION ALL работает быстрее, чем просто UNION, поскольку по умолчанию при использовании оператора UNION проводится дополнительная фильтрация результата аналогичная SELECT DISTINCT, а при использовании UNION ALL — нет[4].

Примеры

Использование UNION при выборке из двух таблиц

Даны две таблицы:

sales2005 person amount
Иван 1000
Алексей 2000
Сергей 5000
sales2006 person amount
Иван 2000
Алексей 2000
Петр 35000

При выполнении следующего запроса:

(SELECT * FROM sales2005) UNION (SELECT * FROM sales2006);

получается результирующий набор, однако порядок строк может произвольно меняться, поскольку ключевое выражение ORDER BY не было использовано:

person amount
Иван 1000
Алексей 2000
Сергей 5000
Иван 2000
Петр 35000

В результате отобразятся две строки с Иваном, так как эти строки различаются значениями в столбцах. Но при этом в результате присутствует лишь одна строка с Алексеем, поскольку значения в столбцах полностью совпадают.

Использование 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.

См. также

Примечания

Пункт 4 - нерабочая ссылка (на 08.11.2012)

Ссылки

Общее описание Реализация в MS SQL Server Реализация в MySQL Реализация в PostgreSQL Реализация в Oracle Реализация в Informix

veter.academic.ru