Использование union для объединения результатов инструкций select

SQL — Условия UNION

От автора: условие/оператор SQL UNION используется для объединения результатов двух или более инструкций SELECT без включения повторяющихся строк.

Для использования условия UNION, каждый оператор SELECT должен содержать

Такое же количество выбранных столбцов

Такое же количество выражений столбцов

Тот же тип данных

Они должны располагаться в том же порядке

Но они не обязательно должны быть одинаковой длины.

Синтаксис

Основной синтаксис условия UNION следующий:

SELECT column1 [, column2 ]

FROM table1 [, table2 ]

[WHERE condition]

UNION

SELECT column1 [, column2 ]

FROM table1 [, table2 ]

[WHERE condition]

Здесь данное условие может быть любым выражением, заданным исходя из ваших потребностей.

Пример

Рассмотрим следующие две таблицы. Таблица 1 — Таблица CUSTOMERS выглядит следующим образом.

SQL — Условия UNION

Таблица 2 — Таблица ORDERS выглядит следующим образом.

SQL — Условия UNION

Теперь давайте объединим эти две таблицы в инструкции SELECT следующим образом:

SELECT  ID, NAME, AMOUNT, DATE

  FROM CUSTOMERS

  LEFT JOIN ORDERS

  ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

UNION

  SELECT  ID, NAME, AMOUNT, DATE

  FROM CUSTOMERS

  RIGHT JOIN ORDERS

  ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Это даст следующий результат —

SQL — Условия UNION

Условие UNION ALL

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

Синтаксис

Основной синтаксис UNION ALL следующий.

SELECT column1 [, column2 ]

FROM table1 [, table2 ]

[WHERE condition]

UNION ALL

SELECT column1 [, column2 ]

FROM table1 [, table2 ]

[WHERE condition]

Здесь данное условие может быть любым выражением, заданным исходя из ваших потребностей

Пример

Рассмотрим следующие две таблицы, Таблица 1 — Таблица CUSTOMERS выглядит следующим образом.

SQL — Условия UNION

Таблица 2 — таблица ORDERS выглядит следующим образом.

SQL — Условия UNION

Теперь давайте объединим эти две таблицы в инструкции SELECT следующим образом:

SELECT  ID, NAME, AMOUNT, DATE

  FROM CUSTOMERS

  LEFT JOIN ORDERS

  ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

UNION ALL

  SELECT  ID, NAME, AMOUNT, DATE

  FROM CUSTOMERS

  RIGHT JOIN ORDERS

  ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Это даст следующий результат:

SQL — Условия UNION

Существует два других условия или оператора похожих на условие UNION.

Условие SQL INTERSECT − используется для объединения двух инструкций SELECT, но возвращает только строки из первого оператора SELECT, которые совпадают со строкой из второго оператора SELECT.

Условие SQL EXCEPT − объединяет два оператора SELECT и возвращает строки из первого оператора SELECT, которые не возвращаются вторым оператором SELECT.

Источник: //www.tutorialspoint.com/

Редакция: Команда webformyself.

UNION
объединяет информацию из 2-х и более
отдельных запросов SELECT
в один курсор или таблицу. При этом в
команде SELECT
можно использовать до 10 членов UNION,
связывая каждую инструкцию SELECT
с предыдущей. Результирующий набор,
созданный первой командой SELECT,
определяет требуемую структуру для
остальных команд SELECT.
Порядок, количество, размер и тип полей
в первой команде SELECT
определяет структуру для всех последующих
команд SELECT.

Например, для
получения списка всех студентов и
преподавателей фамилии которых заключены
между буквами «К» и «С»:

SELECT
SFAM, SIMIA FROM STUD; WHERE SFAM BETWEEN ‘K’ AND
‘C’; UNION; SELECT TFAM, TIMIA FROM TEACHER; WHERE TFAM BETWEEN
‘K’ AND ‘C’

Когда 2 или более
запросов подвергаются объединению, их
столбцы вывода должны быть совместимы
для объединения. Это означает для каждого
запроса необходимость включения
одинакового числа столбцов в том же
порядке, что и 1, 2, 3 и т.д. и при этом должна
присутствовать совместимость типов.

Например: символьные
поля должны иметь одинаковое число
символов. Кроме того нельзя использовать
агрегатные функции в запросе SELECT
при объединении. Агрегатные функции –
MIN,
MAX,
AVG,
SUM.
Также UNION
будет автоматически исключать дубликаты
строк из вывода.

Пусть таблица
STUD1
содержит поле, состоящее из 30 символов,
которые включают Имя и Фамилию.

Таблица TEACHER
содержит отдельные поля для имени и
фамилии. Сумма длин этих полей также
равна 30 символам.

В таблице STUD1
определено поле для хранения факультета,
а в таблице TEACHER
– нет. Для объединения данных результирующих
наборов необходимо согласовать эти
различия.

SELECT
STUD1.FAC
FROM
STUD;

UNION;

SELECT
PADR (ALLTRIM(TEACHER.FIRSTNAME)+ALLTRIM(TEACHER.LASTNAME), 30);

AS NAME, SPACE (10) AS FAK;

FROM
TEACHER

Член SPACE(10)
играет роль «заглушки», которая относится
к полю, содержащему имя факультета в
файле TEACHER.
Этот член заполняет поле с именем
факультета в объединенные результирующие
таблицы пробелами. Без подобной заглушки
операция UNION
корректно работать не будет. Подобную
заглушку можно поставить в любой
инструкции SELECT.
Можно поместить заглушку в первую
команду SELECT,
чтобы зарезервировать строку пробелов
для поля, которое существует только в
последующих командах SELECT.
Можно включить пробелы в одну из
внутренних команд SELECT,
чтобы обеспечить совпадение с первой
командой SELECT.

Функция ALLTRIM
удаляет пробелы слева и справа из
соответствующего имени учителя.

Функция PADR
создает поле с заданной длиной. Между
именем и фамилией поставлен разделительный
пробел (+). Если общая длина поля меньше
30-символьного ограничения, то будет
усечен последний символ.

Воздействие
ключевого слова UNION
аналогично действию DISTINCT.
Это значит, что каждая добавленная в
результирующий набор запись проверяется
на уникальность. Члены UNION
используются только для объединения
запросов, но никак не влияют на подзапросы.

Правила объединения
с помощью UNION:

  1. Любое поле,
    включенное в первый список полей, должно
    быть представлено полем или заглушкой
    в последующих списках полей.

  2. Любое поле из
    последующих списков полей, которое не
    входит в первый список полей, должно
    быть представлено заглушкой в первом
    списке

  3. В первом списке
    не должно быть вычисляемых полей

  4. Члены ORDER
    BY
    и INTO
    могут входить в любую инструкцию SELECT,
    но только 1 раз и применяются ко всему
    результату.

  5. Член ORDER
    BY
    должен ссылаться на поля, по их позициям
    в списке, а не по имени.

  6. При отсутствии
    члена ORDER
    BY
    для сортировки используется порядок
    следования полей в списке.

  7. Члены GROUP
    BY
    и HAVING
    могут присутствовать в каждой инструкции
    SELECT,
    причем их влияние ограничено только
    результатами работы данной инструкции
    SELECT.

  8. С помощью членов
    UNION
    нельзя объединять результаты подзапросов,
    то есть члены UNION
    нельзя применить к инструкциям SELECT,
    используемым внутри члена WHERE
    других инструкций SELECT.

  9. При построении
    объединения можно использовать не
    более 10 членов UNION.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Оператор UNION используется для объединения результатов двух или более запросов SELECT в один набор результатов. Команда UNION отличается от JOIN-операторов, которые объединяют столбцы из двух таблиц. UNION создает новую таблицу, помещая все строки из двух исходных таблиц в таблицу результатов и располагая эти строки друг над другом.

Далее приведены основные правила объединения наборов результатов двух запросов SELECT с помощью UNION:

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

Если эти критерии выполняются, то таблицы совместимы с оператором UNION.

Синтаксис

Базовый синтаксис оператора UNION представлен следующим образом:

SELECT список_столбцов FROM таблица1
UNION SELECT список_столбцов FROM таблица2;

Чтобы лучше понять, как работает оператор UNION, предположим, что в таблицах employees и departments существуют некоторые гипотетические поля first_name и last_name. Обратите внимание, что эти поля на самом деле не существуют в демонстрационных таблицах.

Таблица employees

Таблица departments

+----+------------+-----------+--------+
| id | first_name | last_name | salary |
+----+------------+-----------+--------+
|  1 | Ethan      | Hunt      |   5000 |
|  2 | Tony       | Montana   |   6500 |
|  3 | Sarah      | Connor    |   8000 |
|  4 | Rick       | Deckard   |   7200 |
|  5 | Martin     | Blank     |   5600 |
+----+------------+-----------+--------+
+----+------------+-----------+----------+
| id | first_name | last_name | city     |
+----+------------+-----------+----------+
|  1 | Maria      | Anders    | Berlin   |
|  2 | Fran       | Wilson    | Madrid   |
|  3 | Dominique  | Perrier   | Paris    |
|  4 | Martin     | Blank     | Turin    |
|  5 | Thomas     | Hardy     | Portland |
+----+------------+-----------+----------+

Выполним оператор UNION, чтобы объединить результаты двух запросов.

Следующая команда вернет имена и фамилии всех клиентов и сотрудников:

SELECT first_name, last_name FROM employees 
UNION
SELECT first_name, last_name FROM customers;

После выполнения приведенной выше команды вы получите такой результат:

+---------------+--------------+
| first_name    | last_name    |
+---------------+--------------+
| Ethan         | Hunt         |
| Tony          | Montana      |
| Sarah         | Connor       |
| Rick          | Deckard      |
| Martin        | Blank        |
| Maria         | Anders       |
| Fran          | Wilson       |
| Dominique     | Perrier      |
| Thomas        | Hardy        |
+---------------+--------------+

Оператор UNION по умолчанию удаляет дублирующиеся строки из объединенного набора результатов. Вот почему приведенный выше запрос возвращает только 9 строк. Если вы заметили, имя Martin Blank встречается и в таблице employees, и в таблице customers

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

SELECT first_name, last_name FROM employees 
UNION ALL
SELECT first_name, last_name FROM customers;

В этом учебном материале вы узнаете, как использовать SQL оператор UNION с синтаксисом и примерами.

Описание

SQL оператор UNION используется для объединения результирующих наборов из 2 или более операторов SELECT. Он удаляет повторяющиеся строки между различными запросами SELECT.
Каждый оператор SELECT в UNION должен иметь одинаковое количество полей в наборах результатов с одинаковыми типами данных.

  • UNION удаляет повторяющиеся строки
  • Оператор UNION ALL не удаляет повторяющиеся строки

Синтаксис

Синтаксис для оператора UNION в SQL.

SELECT expression1, expression2, … expression_n
FROM tables
[WHERE conditions]
UNION
SELECT expression1, expression2, … expression_n
FROM tables
[WHERE conditions];

Параметры или аргумент

expression1, expression2, expression_n
Столбцы или расчеты, которые вы хотите получить
tables
Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица
WHERE conditions
Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны

Примечание

  • В обоих операторах SELECT должно быть одинаковое количество выражений
  • Соответствующие выражения должны иметь одинаковый тип данных в запросах SELECT. Например: expression1 должен иметь одинаковый тип данных как в первом, так и во втором операторе SELECT
  • Смотрите также оператор UNION ALL

Пример — одиночное поле с тем же именем

Давайте посмотрим, как использовать SQL оператор UNION, который возвращает одно поле. В этом простом примере поле в обоих операторах SELECT будет иметь одинаковое имя и тип данных.
Например.

SELECT supplier_id

  FROM suppliers

UNION

SELECT supplier_id

  FROM orders

ORDER BY supplier_id;

В этом SQL примере оператора UNION, если supplier_id появилось в таблицах suppliers и orders, оно будет один раз в вашем наборе результатов. Оператор UNION удаляет дубликаты. Если вы не хотите удалить дубликаты, попробуйте использовать оператор UNION ALL.
Теперь давайте рассмотрим этот пример, далее приведем некоторые данные.
Если у вас была таблица suppliers, заполненная следующими записями.

supplier_id supplier_name
1000 Yandex
2000 Google
3000 Oracle
4000 Bing

И таблица orders заполнена следующими записями.

order_id order_date supplier_id
2019-07-01 2000
2019-07-01 6000
2019-07-02 7000
2019-07-03 8000

И вы выполнили следующий запрос UNION.

SELECT supplier_id

  FROM suppliers

UNION

SELECT supplier_id

  FROM orders

ORDER BY supplier_id;

Вы получите следующие результаты.

supplier_id
1000
2000
3000
4000
6000
7000
8000

Как видно из этого примера, UNION взял все значения supplier_id из таблицы suppliers, а также из таблицы orders и возвратил комбинированный набор результатов. Поскольку оператор UNION удалил дубликаты между результирующими наборами, поле supplier_id 2000 отображается только один раз, даже если оно находится в таблицах suppliers и orders. Если вы не хотите удалять дубликаты, попробуйте вместо этого использовать оператор UNION ALL.

Пример — разные имена полей

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

SELECT supplier_id,

       supplier_name

  FROM suppliers

WHERE supplier_id > 2000

UNION

SELECT company_id,

       company_name

  FROM companies

WHERE company_id > 1000

ORDER BY 1;

В этом SQL примере UNION, поскольку имена столбцов в двух операторах SELECT различаются, более выгодно ссылаться на столбцы в ORDER BY по их положению в наборе результатов. В этом примере мы отсортировали результаты по supplier_id / company_id в порядке возрастания, как обозначено ORDER BY 1. Поля supplier_id / company_id находятся в позиции № 1 в наборе результатов.

Теперь давайте рассмотрим этот пример подробнее с данными.
Если у вас была таблица suppliers, заполненная следующими записями.

supplier_id supplier_name
1000 Microsoft
2000 Oracle
3000 Apple
4000 Samsung

И таблица companies заполнилась следующими записями.

company_id company_name
1000 Microsoft
3000 Apple
7000 Sony
8000 IBM

И вы выполнили следующий оператор UNION.

SELECT supplier_id,

       supplier_name

  FROM suppliers

WHERE supplier_id > 2000

UNION

SELECT company_id, company_name

  FROM companies

WHERE company_id > 1000

ORDER BY 1;

Вы получите следующие результаты.

supplier_id supplier_name
3000 Apple
4000 Samsung
7000 Sony
8000 IBM

Во-первых, обратите внимание, что запись с supplier_id, равной 3000, появляется только один раз в наборе результатов, поскольку запрос UNION удалил повторяющиеся записи.
Во-вторых, обратите внимание, что заголовки столбцов в наборе результатов называются supplier_id и supplier_name. Это потому, что это были имена столбцов, использованных в первом операторе SELECT в UNION.
Если бы вы хотели, вы могли бы присвоить псевдонимы столбцам следующим образом.

SELECT supplier_id AS ID_Value,

   supplier_name AS Name_Value

  FROM suppliers

WHERE supplier_id > 2000

UNION

SELECT company_id AS ID_Value,

       company_name AS Name_Value

  FROM companies

WHERE company_id > 1000

ORDER BY 1;

Теперь заголовки столбцов в результате будут иметь псевдоним как ID_Value для первого столбца и Name_Value для второго столбца.

ID_Value Name_Value
3000 Apple
4000 Samsung
7000 Sony
8000 IBM


Оператор UNION

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

  • Каждый оператор SELECT в UNION должен иметь одинаковое количество столбцов
  • Столбцы также должны иметь схожие типы данных
  • Столбцы в каждом заявлении SELECT также должны располагаться в том же порядке

Синтаксис UNION

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

Синтаксис UNION ALL

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

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

Примечание: Имена столбцов в результирующем наборе обычно равны именам столбцов в первом заявлении SELECT в UNION.


Демо база данных

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

Ниже приведен выбор из таблицы «Customers»:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico

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

SupplierID SupplierName ContactName Address City PostalCode Country
1 Exotic Liquid Charlotte Cooper 49 Gilbert St. London EC1 4SD UK
2 New Orleans Cajun Delights Shelley Burke P.O. Box 78934 New Orleans 70117 USA
3 Grandma Kelly’s Homestead Regina Murphy 707 Oxford Rd. Ann Arbor 48104 USA


Пример SQL UNION

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

Пример

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;

Попробуйте сами »

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


Пример SQL UNION ALL

Следующая инструкция SQL возвращает города (также повторяющиеся значения) как из таблицы «Customers», так и из таблицы «Suppliers»:

Пример

SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;

Попробуйте сами »


Пример SQL UNION с WHERE

Следующая инструкция SQL возвращает немецкие города (только отдельные значения) как из таблицы «Customers», так и из таблицы «Suppliers»:

Пример

SELECT City, Country FROM Customers
WHERE Country=’Germany’
UNION
SELECT City, Country FROM Suppliers
WHERE Country=’Germany’
ORDER BY City;

Попробуйте сами »


Пример SQL UNION ALL с WHERE

Следующая инструкция SQL возвращает немецкие города (также повторяющиеся значения) как из таблицы «Customers», так и из таблицы «Suppliers»:

Пример

SELECT City, Country FROM Customers
WHERE Country=’Germany’
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country=’Germany’
ORDER BY City;

Попробуйте сами »


Пример UNION другой

Следующая инструкция SQL содержит список всех клиентов и поставщиков:

Пример

SELECT ‘Customer’ As Type, ContactName, City, Country
FROM Customers
UNION
SELECT ‘Supplier’, ContactName, City, Country
FROM Suppliers;

Попробуйте сами »

Обратите внимание на «AS Type» выше — это псевдоним.
Псевдонимы SQL используются для присвоения таблице или столбцу временного имени.
Псевдоним существует только на время выполнения запроса.
Итак, здесь мы создали временный столбец с именем «Type», который перечисляет, является ли контактное лицо «клиентом» или «поставщиком».

Понравилась статья? Поделить с друзьями:
  • Использование гло инструкция по эксплуатации
  • Исландский мох трава инструкция по применению цена
  • Исполнительный лист инструкция для бухгалтера
  • Исла моос инструкция по применению цена в спб
  • Исла моос инструкция детям по применению