JOINСредний
FULL OUTER JOIN
Возвращает все строки из обеих таблиц. Где нет совпадения — NULL с соответствующей стороны.
Синтаксис
SELECT ... FROM t1 FULL OUTER JOIN t2 ON t1.id = t2.t1_id;Объяснение
FULL OUTER JOIN = LEFT JOIN + RIGHT JOIN (без дублей). Используется редко, но полезен для нахождения несоответствий между двумя таблицами.
Пример использования: сравнить данные в двух таблицах и найти строки, которые есть только в одной.
Пример
-- Найти несоответствия между двумя источниками данных
SELECT a.id AS id_a, b.id AS id_b
FROM source_a a
FULL OUTER JOIN source_b b ON a.id = b.id
WHERE a.id IS NULL OR b.id IS NULL;Связанные термины
INNER JOINВозвращает только строки, у которых есть совпадение в обеих таблицах.JOINОператор, объединяющий строки из двух и более таблиц по условию связи между ними.LEFT JOINВозвращает все строки из левой таблицы. Для строк без пары в правой — NULL.RIGHT JOINВозвращает все строки из правой таблицы. Для строк без пары в левой — NULL.
Анекдоты по теме
Таблица Users пишет таблице Orders: — Ты забыл про меня. Мы не связаны. Orders: — У тебя нет внешнего ключа ко мне. Users: — Значит, я буду NULL в твоей жизни. DBA: — Это LEFT JOIN, успокойтесь.
— Что такое N+1 проблема? — Загрузил список из 100 пользователей — 1 запрос. Потом для каждого загрузил заказы — 100 запросов. Итого 101 запрос вместо 1 с JOIN. — Как исправить? — prefetch_related / eager loading / JOIN.
— Почему JOIN любят, но боятся? — Потому что соединить две таблицы легко. А четыре — уже сложно. А восемь — ты уже не программист, а жонглёр.