Ответ
Операция JOIN используется для объединения строк из двух или более таблиц на основе связанного столбца. Основные типы:
Основные JOIN-операции
-
INNER JOIN
- Возвращает только те строки, для которых условие соединения (
ON) истинно в обеих таблицах. - Это самый распространённый тип JOIN.
SELECT a.*, b.* FROM Orders a INNER JOIN Customers b ON a.CustomerId = b.Id; -- Результат: только заказы, у которых есть клиент.
- Возвращает только те строки, для которых условие соединения (
-
LEFT (OUTER) JOIN
- Возвращает все строки из левой (первой) таблицы и совпадающие строки из правой. Если совпадения нет, для столбцов правой таблицы возвращается
NULL.SELECT a.*, b.* FROM Customers a LEFT JOIN Orders b ON a.Id = b.CustomerId; -- Результат: все клиенты, даже те, у которых нет заказов.
- Возвращает все строки из левой (первой) таблицы и совпадающие строки из правой. Если совпадения нет, для столбцов правой таблицы возвращается
-
RIGHT (OUTER) JOIN
- Обратный
LEFT JOIN. Возвращает все строки из правой таблицы и совпадающие из левой. Используется реже, так как запрос обычно можно переписать сLEFT JOIN, поменяв таблицы местами.
- Обратный
-
FULL (OUTER) JOIN
- Возвращает все строки из обеих таблиц. Если совпадение есть, строки объединяются. Если совпадения для строки из левой таблицы нет, столбцы правой будут
NULL, и наоборот.SELECT a.*, b.* FROM TableA a FULL OUTER JOIN TableB b ON a.Key = b.Key; -- Результат: все записи из A и B.
- Возвращает все строки из обеих таблиц. Если совпадение есть, строки объединяются. Если совпадения для строки из левой таблицы нет, столбцы правой будут
Специальные JOIN-операции
-
CROSS JOIN
- Возвращает декартово произведение таблиц: каждая строка первой таблицы соединяется с каждой строкой второй. Может генерировать очень большие результирующие наборы.
SELECT a.*, b.* FROM Colors a CROSS JOIN Sizes b; -- Результат: все комбинации цветов и размеров.
- Возвращает декартово произведение таблиц: каждая строка первой таблицы соединяется с каждой строкой второй. Может генерировать очень большие результирующие наборы.
-
SELF JOIN
- Соединение таблицы самой с собой. Полезно для работы с иерархическими данными (например, таблица сотрудников с полем
ManagerId).SELECT emp.Name AS Employee, mgr.Name AS Manager FROM Employees emp LEFT JOIN Employees mgr ON emp.ManagerId = mgr.Id;
- Соединение таблицы самой с собой. Полезно для работы с иерархическими данными (например, таблица сотрудников с полем
Ключевое отличие INNER от OUTER JOIN: INNER фильтрует результат по совпадению, OUTER сохраняет все строки из одной или обеих таблиц, заполняя пропуски NULL.