Ответ
Типы JOIN определяют, как строки из двух или более таблиц объединяются на основе условия.
| Тип JOIN | Описание | Использование |
|---|---|---|
INNER JOIN |
Возвращает только строки, где есть совпадение в обеих таблицах. | Получение связанных данных, которые существуют в обеих таблицах. |
LEFT (OUTER) JOIN |
Возвращает все строки из левой таблицы и совпадающие из правой. При отсутствии совпадений поля правой таблицы будут NULL. |
Анализ данных, включая записи, у которых может не быть связей (например, заказы без клиентов). |
RIGHT (OUTER) JOIN |
Обратный LEFT JOIN. Возвращает все строки из правой таблицы и совпадающие из левой. |
Аналогично LEFT JOIN, но когда приоритетна правая таблица. |
FULL (OUTER) JOIN |
Возвращает все строки из обеих таблиц. Совпадающие строки объединяются, а отсутствующие совпадения заполняются NULL. |
Объединение двух наборов данных с сохранением всех записей. |
CROSS JOIN |
Декартово произведение: каждая строка первой таблицы соединяется с каждой строкой второй. | Создание всевозможных комбинаций (например, для тестовых данных). |
SELF JOIN |
Соединение таблицы с самой собой (обычно с использованием псевдонимов). | Работа с иерархическими данными (например, сотрудник -> менеджер). |
Примеры SQL:
-- INNER JOIN: Только пользователи с заказами
SELECT u.name, o.id FROM users u INNER JOIN orders o ON u.id = o.user_id;
-- LEFT JOIN: Все пользователи, даже без заказов
SELECT u.name, o.id FROM users u LEFT JOIN orders o ON u.id = o.user_id;
-- SELF JOIN: Иерархия сотрудников
SELECT e.name AS employee, m.name AS manager
FROM employees e LEFT JOIN employees m ON e.manager_id = m.id;
В Java-экосистеме (Hibernate/JPA) JOIN-операции часто выражаются через связи сущностей (@OneToMany, @ManyToOne) или явно в JPQL/HQL.