Поиск по сайту:
Каков же итог жизни? Ужасно мало смысла (В.В. Розанов).

SQL – класс UNION

[wtr-time]
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
20.04.2017
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 включая повторяющиеся строки.

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

 

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

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

Добавить комментарий

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

**ссылки nofollow

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: