Ответ
JOIN используется для объединения строк из двух или более таблиц на основе условия связи. Основные виды:
-
INNER JOIN(Внутреннее соединение) Возвращает только те строки, где есть совпадение в обеих таблицах.SELECT e.name, d.name FROM employees e INNER JOIN departments d ON e.department_id = d.id; -- Результат: только сотрудники с привязанным отделом. -
LEFT (OUTER) JOIN(Левое внешнее соединение) Возвращает все строки из левой таблицы и совпадающие строки из правой. Если совпадения нет, для правой таблицы возвращаютсяNULL.SELECT e.name, d.name FROM employees e LEFT JOIN departments d ON e.department_id = d.id; -- Результат: все сотрудники, даже без отдела. -
RIGHT (OUTER) JOIN(Правое внешнее соединение) ОбратноеLEFT JOIN. Возвращает все строки из правой таблицы и совпадающие из левой. -
FULL (OUTER) JOIN(Полное внешнее соединение) Возвращает все строки из обеих таблиц. Если совпадения нет, для недостающей стороны возвращаетсяNULL.SELECT e.name, d.name FROM employees e FULL JOIN departments d ON e.department_id = d.id; -- Результат: все сотрудники и все отделы. -
CROSS JOIN(Декартово произведение) Возвращает все возможные комбинации строк из обеих таблиц. Не имеет условия ON.SELECT e.name, d.name FROM employees e CROSS JOIN departments d; -- Каждый сотрудник будет сопоставлен с каждым отделом. -
SELF JOIN(Самосоединение) Соединение таблицы с самой собой (используется псевдонимы). Полезно для иерархических данных.SELECT e1.name AS employee, e2.name AS manager FROM employees e1 LEFT JOIN employees e2 ON e1.manager_id = e2.id;
Ключевое отличие: INNER JOIN фильтрует данные, оставляя только пересечение. OUTER JOIN (LEFT, RIGHT, FULL) сохраняет все строки одной или обеих таблиц, дополняя недостающие данные NULL. CROSS JOIN создает все комбинации.