Ответ
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 — пожалуйста, нате, ешьте. Работает.
- Нахуя это нужно? Да чтобы, блядь, полную картину получить! Увидеть ВСЕХ: кто с кем сошёлся, а кто так и болтается в гордом одиночестве с каждой стороны. Для аудита, для сравнения списков — вещь, в общем-то, незаменимая, если знать, как применить.