Оператор 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
Мы можем использовать псевдонимы 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; |
Результат: