LEFT OUTER JOIN и LEFT JOIN в SQL: одно и то же?
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
В SQL-запросах LEFT JOIN и LEFT OUTER JOIN действительно являются одним и тем же. Они оба предназначены для выбора всех строк из левой таблицы и совпадающих строк из правой таблицы. Если совпадения не найдены, появление NULL значит, что строка из правой таблицы не была выбрана.
Пример:
SELECT a.*, b.*
FROM a
LEFT JOIN b ON a.key = b.key;
-- В нашем случае используется LEFT JOIN!
Результат будет идентичен, если использовать:
SELECT a.*, b.*
FROM a
LEFT OUTER JOIN b ON a.key = b.key;
-- Для некоторых это не новость: мы применяли LEFT OUTER JOIN!
Оба запроса вернут все строки из таблицы a
, связанные с соответствующими строками из b
. Колонки из b
, для которых не найдено соответствующих строк, будут заполнены значениями NULL.
Отличия между типами соединений
Несмотря на однозначность LEFT OUTER JOIN и LEFT JOIN, понимание различных видов соединений — залог эффективного использования SQL:
- INNER JOIN: Соединяет только те строки, которые совпадают и в левой, и в правой таблицах. Это аналог входа на вечеринку, куда у людей есть приглашения от обоих сторон.
- RIGHT JOIN / RIGHT OUTER JOIN: Возвращает все строки из правой таблицы и совпадающие строки из левой. Простое объяснение: сначала все со второго блюда, а потом какой-нибудь салатик.
- FULL JOIN: Комбинирует LEFT и RIGHT JOIN, включая строки из обеих таблиц, безотносительно наличия совпадений.
- SELF JOIN: Применяется, когда таблица связывается сама с собой – полезно для иерархических запросов.
- CARTESIAN JOIN / CROSS JOIN: Декартово произведение, соединяет все возможные комбинации строк между двумя или большим количеством таблиц без условия соответствия.
Обязательно просмотрите синтаксис диалектов SQL. В некоторых из них обязательно использовать слово OUTER.
Визуализация
Согласитесь, изображение может сказать больше слов! Давайте вспомним аналогию с поездом!
Поезд (🚂): [Локомотив, Вагон A, Вагон B, Кабуз]
Вагон A (🚃): Символизирует Левую таблицу. Вагон B (🚋): Обозначает соответствующие строки из Правой таблицы.
🚂---🚃---🚋---🛤️ (Left Join)
Как поезд, Left Join перемещает всех пассажиров из Вагона A и тех из Вагона B, которые имеют билеты (то есть совпадение).
🚂---🚃---🚋---🚃✨---🛤️ (Left Outer Join)
Left Outer Join следует по том же пути. Выделенный вагон (✨) представляет строки из Левой таблицы, для которых некому стать парой. Они все равно участвуют в поездке!
Итог: как вы можете видеть из примеров, Left Join и Left Outer Join в SQL — это два разных названия для одной и той же операции!
Связывание точек: ключевые моменты по соединениям
SQL умеет работать с отношениями между данными. Вот некоторые ключевые моменты, которые необходимо помнить при использовании соединений:
Как максимально использовать возможности соединений
- LEFT JOIN: Применяйте, чтобы получить полный список записей из левой (главной) таблицы.
- INNER JOIN: Используйте, чтобы выбрать записи, для которых поиск совпадений в обеих таблицах прошел успешно.
Как не допустить распространенных ошибок при работе с соединениями
- Старайтесь избегать соединения таблиц без условий сопоставления, если вы не хотите получить декартово произведение.
- Не путайте FULL JOIN с LEFT или RIGHT JOIN. Они решают разные задачи и дают разные результаты.
Повышение эффективности соединений
- Для ускорения работы соединений убедитесь, что используемые в условиях
ON
столбцы проиндексированы. Это похоже на ускорение работы вашего соединения скоростным катером! - Регулярно просматривайте планы выполнения запросов, чтобы разобраться, как бд обрабатывает соединения, и при необходимости оптимизируйте их.
Полезные материалы
- Визуализация SQL-соединений — Наглядное визуальное руководство по SQL-соединениям.
- Обзор типов SQL-соединений и учебник — Комплексный обзор разных типов SQL-соединений.
- Соединения (документации Oracle) — Объяснения использования соединений от официального источника Oracle.
- LEFT JOIN против LEFT OUTER JOIN в SQL Server – разбор на Stack Overflow — Мнение программистов о LEFT JOIN и LEFT OUTER JOIN.
- Соединения (SQL Server) – SQL Server | Microsoft Learn — Официальное руководство Microsoft по соединениям в SQL Server, в том числе аспекты производительности.
- Учебная шпаргалка по SQL-запросам | Codecademy — Удобная шпаргалка для освоения материала.
- SQLBolt – Обучение SQL – Урок 6: Многотабличные запросы соединениями — Очень полезный интерактивный подход к изучению SQL-соединений.