SQL и базы данныхJuniorСкрининг с HR
Отличия LEFT, RIGHT и INNER JOIN в SQL: что и как выбирают
Краткий ответ
LEFT JOIN выводит все строки из левой таблицы и совпадающие из правой, RIGHT JOIN — наоборот, все из правой и совпадающие из левой. INNER JOIN возвращает только записи, имеющие совпадения в обеих таблицах.
Развёрнуто
Краткий ответ
LEFT JOIN возвращает все записи из левой таблицы и те, что совпадают по ключу в правой. RIGHT JOIN — все записи из правой таблицы и совпадающие из левой. INNER JOIN показывает только строки, где есть совпадения в обеих таблицах.
Как это работает
В SQL операция JOIN объединяет строки из двух таблиц на основе определённого условия.
- LEFT JOIN (или LEFT OUTER JOIN) включает все строки из левой таблицы и добавляет данные из правой, если совпадение найдено; если нет, в полях правой таблицы будут NULL.
- RIGHT JOIN (RIGHT OUTER JOIN) — зеркальный вариант: берутся все строки из правой таблицы и добавляются совпадающие из левой.
- INNER JOIN возвращает только те строки, где условие соединения выполняется в обеих таблицах, исключая все остальные.
| Тип JOIN | Результат | NULL в результате |
|---|---|---|
| LEFT JOIN | Все из левой + совпадающие из правой | В столбцах правой таблицы, если совпадений нет |
| RIGHT JOIN | Все из правой + совпадающие из левой | В столбцах левой таблицы, если совпадений нет |
| INNER JOIN | Только совпадающие строки из обеих таблиц | Нет |
Пример
SELECT a.id, a.name, b.order_date
FROM customers a
LEFT JOIN orders b ON a.id = b.customer_id;
В этом примере выводятся все клиенты (customers) и их заказы (orders), если они есть. Если заказов нет, поля из orders будут NULL.
Что важно знать на собеседовании
- INNER JOIN фильтрует записи, оставляя только совпадающие по ключу из обеих таблиц.
- OUTER JOIN (LEFT и RIGHT) сохраняют все строки из одной таблицы, добавляя данные из другой или NULL.
- В большинстве СУБД RIGHT JOIN можно заменить на LEFT JOIN, поменяв местами таблицы.
- Понимание JOIN важно для тестирования корректности данных и оптимизации запросов.
- Важно различать, какая таблица является левой, а какая правой в запросе.
Тема: SQL и базы данных | Уровень: junior