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.
Анекдоты по теме
Встречаются INNER JOIN и LEFT JOIN. LEFT JOIN говорит: — Ты слишком строгий: если нет совпадения — сразу вон. А я даже пустоту оставляю. INNER JOIN: — Да, зато у меня нет дырок в отчётах.
Начинающий: — Я написал JOIN, а строк стало больше, чем было! Опытный: — Поздравляю. Ты сделал CROSS JOIN. Забыл ON.
ORM приходит к психотерапевту: — Я генерирую запросы. Терапевт: — И что в этом плохого? ORM: — 500 JOIN на пустой таблице. Терапевт: — А lazy loading пробовали? ORM: — Тогда 500 отдельных запросов. Терапевт: — Вам нужен DBA.