Логотип
Никто не обнимет необъятного (К. Прутков).

SQL — класс UNION

SQL - класс UNION

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

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

  • Одинаковое количество выбранных столбцов
  • Одинаковое количество выбранных столбцов выражений
  • Тот же тип данных
  • Иметь их в том же порядке

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

Синтаксис

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

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

 

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

Пример

Рассмотрим следующие две таблицы.

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

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Moscow    | 21000.00 |
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 34000.00 |
|  5 | Ruslan   |  34 | Omsk      | 45000.00 |
|  6 | Dima     |  32 | SP        | 45000.00 |
|  7 | Roma     |  34 | SP        | 10000.00 |
+----+----------+-----+-----------+----------+

 

 

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

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2017-01-08 00:00:00 |           3 |  34200 |
| 100 | 2017-01-08 00:00:00 |           3 |  25000 |
| 101 | 2017-02-10 00:00:00 |           2 |  23450 |
| 103 | 2017-03-12 00:00:00 |           4 |  34000 |
+-----+---------------------+-------------+--------+

 

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

SQL> 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;

 

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

+------+----------+--------+---------------------+
| ID   | NAME     | AMOUNT | DATE                |
+------+----------+--------+---------------------+
|    1 | Maxim    |   NULL | NULL                |
|    2 | AndreyEx |  23450 | 2017-02-10 00:00:00 |
|    3 | Oleg     |  34200 | 2017-01-08 00:00:00 |
|    3 | Oleg     |  25000 | 2017-01-08 00:00:00 |
|    4 | Masha    |  34000 | 2017-03-12 00:00:00 |
|    5 | Ruslan   |   NULL | NULL                |
|    6 | Dima     |   NULL | NULL                |
|    7 | Roma     |   NULL | NULL                |
+------+----------+--------+---------------------+

Класс UNION ALL

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

Читать  Хакеры запускают набор инструментов для постэксплуатации Khunt из базы данных Oracle

Те же правила, которые применяются к оператору 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 выглядит следующим образом:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Moscow    | 21000.00 |
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 34000.00 |
|  5 | Ruslan   |  34 | Omsk      | 45000.00 |
|  6 | Dima     |  32 | SP        | 45000.00 |
|  7 | Roma     |  34 | SP        | 10000.00 |
+----+----------+-----+-----------+----------+

 

Таблица 2 — таблица ORDERS следующая:

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2017-01-08 00:00:00 |           3 |  34200 |
| 100 | 2017-01-08 00:00:00 |           3 |  25000 |
| 101 | 2017-02-10 00:00:00 |           2 |  23450 |
| 103 | 2017-03-12 00:00:00 |           4 |  34000 |
+-----+---------------------+-------------+--------+

 

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

SQL> 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;

 

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

+------+----------+--------+---------------------+
| ID   | NAME     | AMOUNT | DATE                |
+------+----------+--------+---------------------+
|    1 | Maxim    |   NULL | NULL                |
|    2 | AndreyEx |  23450 | 2017-02-10 00:00:00 |
|    3 | Oleg     |  34200 | 2017-01-08 00:00:00 |
|    3 | Oleg     |  25000 | 2017-01-08 00:00:00 |
|    4 | Masha    |  34000 | 2017-03-12 00:00:00 |
|    5 | Ruslan   |   NULL | NULL                |
|    6 | Dima     |   NULL | NULL                |
|    7 | Roma     |   NULL | NULL                |
|    3 | Oleg     |  34200 | 2017-01-08 00:00:00 |
|    3 | Oleg     |  25000 | 2017-01-08 00:00:00 |
|    2 | AndreyEx |  23450 | 2017-02-10 00:00:00 |
|    4 | Masha    |  34000 | 2017-03-12 00:00:00 |
+------+----------+--------+---------------------+

 

Читать  SQLite 3.53: исправлена ошибка, приводившая к повреждению WAL, добавлены новые возможности SQL

Есть два других положения (то есть, оператора), которые работают как оператор UNION.

  • Класс INTERSECT— используется в SQL для объединения два SELECT, но возвращает строки только с первым SELECT, которые идентичны со строками во втором SELECT.
  • Класс EXCEPT — объединяет два SELECT и возвращает строку из первого SELECT, не возвращенных вторым SELECT.

Редактор: AndreyEx

Рейтинг: 4.7 (10 голосов)
Если статья понравилась, то поделитесь ей в социальных сетях:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

тринадцать + тринадцать =

Это может быть вам интересно


Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала