Какие существуют типы JOIN?
Существует пять основных типов соединений, каждый из которых определяет, какие строки попадают в результат при наличии или отсутствии совпадений.
| Тип JOIN | Результат | Симметричный |
|---|---|---|
INNER JOIN |
Только строки с совпадениями в обеих таблицах | Да |
LEFT OUTER JOIN |
Все строки из левой + совпадения из правой (или NULL) |
Нет |
RIGHT OUTER JOIN |
Все строки из правой + совпадения из левой (или NULL) |
Нет |
FULL OUTER JOIN |
Все строки из обеих таблиц, NULL где нет совпадений |
Да |
CROSS JOIN |
Декартово произведение — каждая строка с каждой | Да |
INNER JOIN
Возвращает только те записи, для которых найдено совпадение в обеих таблицах. Порядок таблиц не важен — оператор симметричный. Это самый часто используемый тип соединения.
LEFT (OUTER) JOIN
Возвращает все записи из левой таблицы. Для строк, не имеющих совпадения в правой таблице, столбцы правой таблицы заполняются значением NULL. Порядок таблиц важен.
RIGHT (OUTER) JOIN
Зеркальное отражение LEFT JOIN — возвращает все записи из правой таблицы. На практике используется редко, так как любой RIGHT JOIN можно переписать как LEFT JOIN, поменяв таблицы местами.
FULL (OUTER) JOIN
Возвращает все записи из обеих таблиц. Где совпадений нет, соответствующие столбцы заполняются NULL. Полезен для поиска «несвязанных» записей в обеих таблицах.
CROSS JOIN
Каждая строка одной таблицы объединяется с каждой строкой другой. Если в первой таблице M строк, а во второй N, результат содержит M x N строк. Используется для генерации всех возможных комбинаций (например, все пары товар-магазин).
На собеседовании: рисунок с диаграммами Венна для каждого типа
JOIN— лучший способ объяснить разницу. Частая ошибка — не понимать разницу междуLEFT JOINиINNER JOIN, когда в правой таблице нет совпадения.