Что делает оператор FULL OUTER JOIN в SQL?

Ответ

FULL OUTER JOIN — это оператор SQL, который возвращает все записи из обеих объединяемых таблиц.

Логика работы:

  • Совпадающие записи из левой (TableA) и правой (TableB) таблиц объединяются в одну строку.
  • Для записей из TableA, у которых нет совпадения в TableB, столбцы из TableB заполняются значениями NULL.
  • Для записей из TableB, у которых нет совпадения в TableA, столбцы из TableA заполняются значениями NULL.

Пример синтаксиса:

SELECT *
FROM TableA
FULL OUTER JOIN TableB
    ON TableA.id = TableB.id;

Важные особенности:

  • Не поддерживается в MySQL. Для эмуляции используется комбинация LEFT JOIN и RIGHT JOIN с UNION.
  • Поддерживается в PostgreSQL, SQL Server, Oracle и других СУБД.
  • Полезен для полного сравнения двух наборов данных или поиска отсутствующих записей в каждой из таблиц.

Ответ 18+ 🔞

Давай разберём эту штуку, про которую все так мудохаются, но на самом деле всё просто, как три копейки. FULL OUTER JOIN, блядь.

Представь себе две таблицы. Одна — это типа список мужиков на районе (TableA), другая — список баб (TableB). И у всех есть какой-то ключ, ну, условно, номер паспорта (id).

Как это, сука, работает:

  • Если у мужика из TableA нашлась баба из TableB с таким же номером — красота, ёпта! Их данные сливаются в одну счастливую строчку. Любовь, ебать.
  • Если мужик есть, а бабы на него нет (ну, одинокий волк, блядь) — его строка всё равно выводится, но все колонки от таблицы баб будут пустыми, то есть NULL. Сидит, бедолага, в полном одиночестве.
  • Если баба есть, а мужика на неё нет (независимая женщина, чо) — её строка тоже выводится, но колонки от таблицы мужиков будут NULL. Свободна, как птица, нахуй.

Вот и вся, блядь, философия. Берёт ВСЁ и слепляет в одну кучу. И совпадающие парочки, и всех одиноких мудаков со всех сторон.

Как это написать, чтобы машина поняла:

SELECT *
FROM TableA
FULL OUTER JOIN TableB
    ON TableA.id = TableB.id;

А теперь, внимание, ебаный рот этого казино! Главная засада:

  • В MySQL этой хуйни НЕТУ. Вообще. Нахуй не сделали. Там придётся выкручиваться, как уж на сковородке: делать LEFT JOIN и RIGHT JOIN, а потом склеивать их через UNION. Геморрой, но что поделать.
  • А вот в PostgreSQL, SQL Server, Oracle — пожалуйста, нате, ешьте. Работает.
  • Нахуя это нужно? Да чтобы, блядь, полную картину получить! Увидеть ВСЕХ: кто с кем сошёлся, а кто так и болтается в гордом одиночестве с каждой стороны. Для аудита, для сравнения списков — вещь, в общем-то, незаменимая, если знать, как применить.