Оператор FULL OUTER JOIN об’єднує дві таблиці на основі спільного стовпця і вибирає всі рядки з обох таблиць. Наприклад:
|
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers FULL OUTER JOIN Orders ON Customers.customer_id = Orders.customer; |
Ось як працює цей код:

Тут ми вибираємо стовпці customer_id та first_name (з таблиці Customers) та стовпець amount (з таблиці Orders). В результате отримуємо ті рядки, в яких є збіг між customer_id (таблиці Customers) та customer (таблиці Orders) разом зі всіма іншими рядками з обох таблиць.
Синтаксис оператора FULL OUTER JOIN
Синтаксис оператора FULL OUTER JOIN наступний:
|
1 2 3 4 |
SELECT стовпці FROM таблиця1 FULL OUTER JOIN таблиця2 ON таблиця1.назва_стовпця = таблиця2.назва_стовпця; |
Оператор FULL OUTER JOIN з оператором WHERE
Ось приклад використання оператора FULL OUTER JOIN з оператором WHERE:
|
1 2 3 4 5 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers FULL OUTER JOIN Orders ON Customers.customer_id = Orders.customer WHERE Orders.amount >= 500; |
Тут ми об’єднуємо дві таблиці та вибираємо рядки, у яких сума (amount) більше або дорівнює 500.
Оператор FULL OUTER JOIN з псевдонімами
Ми можемо використовувати псевдоніми (оператор AS) з оператором FULL OUTER JOIN, щоб зробити код коротшим та чистішим. Наприклад:
|
1 2 3 4 |
SELECT C.cat_name, P.prod_title FROM Categories AS C FULL OUTER JOIN Products AS P ON C.cat_id = P.cat_id; |
Тут ми вибираємо спільні рядки між таблицями Categories та Products.
Порівняння FULL OUTER JOIN з іншими JOIN-ами
FULL OUTER JOIN проти FULL JOIN
Ми можемо використовувати FULL JOIN замість FULL OUTER JOIN. По суті, ці два оператори однакові.
Наприклад, наступний фрагмент коду:
|
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers FULL OUTER JOIN Orders ON Customers.customer_id = Orders.customer; |
рівнозначний
|
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers FULL JOIN Orders ON Customers.customer_id = Orders.customer; |
FULL OUTER JOIN проти INNER JOIN
Оператор FULL OUTER JOIN вибирає не тільки спільні рядки між двома таблицями, але й всі інші рядки з обох таблиць. Тоді як оператор INNER JOIN вибирає лише спільні рядки між двома таблицями.
FULL OUTER JOIN
|
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers FULL OUTER JOIN Orders ON Customers.customer_id = Orders.customer; |
Результат (див. таблиці):

INNER JOIN
|
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers INNER JOIN Orders ON Customers.customer_id = Orders.customer; |
Результат:

FULL OUTER JOIN проти LEFT JOIN
Оператор FULL OUTER JOIN вибирає не тільки спільні рядки між двома таблицями, але й всі інші рядки з обох таблиць. Тоді як оператор LEFT JOIN вибирає спільні рядки, а також всі інші з лівої таблиці.
FULL OUTER JOIN
|
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers FULL OUTER JOIN Orders ON Customers.customer_id = Orders.customer; |
Результат (див. таблиці):

LEFT JOIN
|
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers LEFT JOIN Orders ON Customers.customer_id = Orders.customer; |
Результат:

FULL OUTER JOIN проти RIGHT JOIN
Оператор FULL OUTER JOIN вибирає не тільки спільні рядки між двома таблицями, але й всі інші рядки з обох таблиць. Тоді як оператор RIGHT JOIN вибирає спільні рядки, а також всі інші з правої таблиці.
FULL OUTER JOIN
|
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers FULL OUTER JOIN Orders ON Customers.customer_id = Orders.customer; |
Результат (див. таблиці):

RIGHT JOIN
|
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers RIGHT JOIN Orders ON Customers.customer_id = Orders.customer; |
Результат:

