Оператор/класс 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 используется для объединения результатов двух 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.