Ответ
Оператор JOIN в SQL используется для объединения строк из двух или более таблиц на основе связанного столбца. Основные виды отличаются логикой обработки совпадающих и несовпадающих строк.
Основные типы JOIN:
-
INNER JOIN
- Что делает: Возвращает только те строки, для которых условие соединения истинно в обеих таблицах.
- Когда использовать: Когда нужны только данные, присутствующие в обеих связанных таблицах.
SELECT * FROM orders INNER JOIN customers ON orders.customer_id = customers.id;
-
LEFT (OUTER) JOIN
- Что делает: Возвращает все строки из левой (первой) таблицы и совпадающие строки из правой. Если совпадения нет, для столбцов правой таблицы возвращается
NULL. - Когда использовать: Когда нужно получить все записи из основной таблицы, даже если для них нет связанных данных в другой таблице.
SELECT * FROM customers LEFT JOIN orders ON customers.id = orders.customer_id;
- Что делает: Возвращает все строки из левой (первой) таблицы и совпадающие строки из правой. Если совпадения нет, для столбцов правой таблицы возвращается
-
RIGHT (OUTER) JOIN
- Что делает: Обратная логика
LEFT JOIN. Возвращает все строки из правой таблицы и совпадающие из левой. - Примечание: Используется реже, так как его функциональность обычно можно выразить через
LEFT JOIN, поменяв таблицы местами.
- Что делает: Обратная логика
-
FULL (OUTER) JOIN
- Что делает: Возвращает все строки из обеих таблиц. Совпадающие строки объединяются, а для несовпадающих с одной стороны заполняются
NULL. - Когда использовать: Когда нужно увидеть полную картину из обеих таблиц, включая отсутствующие связи.
- Что делает: Возвращает все строки из обеих таблиц. Совпадающие строки объединяются, а для несовпадающих с одной стороны заполняются
-
CROSS JOIN
- Что делает: Возвращает декартово произведение таблиц — каждую строку первой таблицы со всеми строками второй.
- Когда использовать: Для генерации всех возможных комбинаций (например, для тестовых данных).
-- Создаст комбинации всех размеров и всех цветов SELECT * FROM sizes CROSS JOIN colors;
-
SELF JOIN
- Что делает: Соединение таблицы с самой собой, как если бы это были две разные таблицы. Технически это обычный
INNERилиLEFT JOIN. - Когда использовать: Для работы с иерархическими данными (например, сотрудник -> менеджер) или сравнения строк внутри одной таблицы.
SELECT e.name AS employee, m.name AS manager FROM employees e LEFT JOIN employees m ON e.manager_id = m.id;
- Что делает: Соединение таблицы с самой собой, как если бы это были две разные таблицы. Технически это обычный
Ключевое отличие: INNER JOIN работает с пересечением данных, а OUTER JOIN (LEFT, RIGHT, FULL) сохраняет строки из одной или обеих таблиц даже при отсутствии совпадений.