Логотип

SQL — Оператор FULL JOINS

SQL - Оператор FULL JOINS

FULL JOIN в SQL сочетает результаты как левого и правого внешнего соединения.

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

Синтаксис

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

SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;

 

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

Пример

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

Таблица 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-11 00:00:00 |           3 |  34000 |
| 100 | 2017-01-11 00:00:00 |           3 |  34000 |
| 101 | 2017-02-02 00:00:00 |           2 |  12500 |
| 103 | 2017-03-05 00:00:00 |           4 |  45000 |
+-----+---------------------+-------------+--------+

 

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

SQL> SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   FULL JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

 

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

+----+----------+--------+---------------------+
| ID | NAME     | AMOUNT | DATE                |
+----+----------+--------+---------------------+
|  1 | Maxim    |  NULL  | NULL                |
|  3 | Oleg     |  34000 | 2017-01-11 00:00:00 |
|  3 | Oleg     |  34000 | 2017-01-11 00:00:00 |
|  2 | AndreyEx |  12500 | 2017-02-02 00:00:00 |
|  4 | Masha    |  45000 | 2017-03-05 00:00:00 |
|  5 | Ruslan   |  NULL  | NULL                |
|  6 | Dima     |  NULL  | NULL                |
|  7 | Roma     |  NULL  | NULL                |
|  3 | Oleg     |  34000 | 2017-01-11 00:00:00 |
|  3 | Oleg     |  34000 | 2017-01-11 00:00:00 |
|  2 | AndreyEx |  12500 | 2017-02-02 00:00:00 |
|  4 | Masha    |  45000 | 2017-03-05 00:00:00 |
+----+----------+--------+---------------------+

 

Читать  5 вещей, о которых следует помнить при выполнении SQL-запросов в производственной базе данных

Если база данных не поддерживает полное объединение (MySQL не поддерживает FULL JOIN), то вы можете использовать оператор UNION ALL, чтобы объединить эти два JOINS, как показано ниже.

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

 

dfd

Редактор: AndreyEx

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

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

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

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


Thanks!

Our editors are notified.

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