← Назад к вопросам

Что такое LEFT JOIN?

1.3 Junior🔥 231 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

LEFT JOIN в SQLLEFT JOIN - операция объединения двух таблиц, которая возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если совпадения нет, правая таблица содержит NULL значения.### Основное определениеLEFT JOIN объединяет:- Левую таблицу (первая) - ВСЕ строки включены- Правую таблицу (вторая) - только совпадающие строки### Синтаксис LEFT JOINSELECT * FROM таблица_A LEFT JOIN таблица_B ON таблица_A.id = таблица_B.a_id### Как работает LEFT JOIN1. Берутся все строки из левой таблицы2. Для каждой строки ищется совпадение в правой таблице по условию ON3. Если совпадение найдено, берутся данные из правой таблицы4. Если совпадения нет, правая таблица заполняется NULL значениями### Пример с таблицамиТаблица Users (левая):id=1 name=Pavelid=2 name=Ivanid=3 name=MariaТаблица Orders (правая):id=101 user_id=1 total=1000id=102 user_id=1 total=2000id=103 user_id=2 total=500Запрос: SELECT users.name, orders.total FROM users LEFT JOIN orders ON users.id = orders.user_idРезультат:Pavel 1000Pavel 2000Ivan 500Maria NULLОбъяснение:- Pavel (id=1): есть 2 заказа- Ivan (id=2): есть 1 заказ- Maria (id=3): нет заказов, поэтому NULL### LEFT JOIN vs INNER JOININNER JOIN вернёт только:Pavel 1000Pavel 2000Ivan 500Мария не появится, потому что у неё нет заказов.LEFT JOIN включает Maria с NULL, потому что она есть в левой таблице.### Когда использовать LEFT JOIN1. Нужны все записи из левой таблицы (даже без совпадений)2. Поиск отсутствующих данных (WHERE orders.id IS NULL)3. Статистика по всем элементам (подсчёт с нулевыми значениями)### Примеры LEFT JOINПример 1: Все пользователи и количество их заказовSELECT users.name, COUNT(orders.id) FROM users LEFT JOIN orders ON users.id = orders.user_id GROUP BY users.nameРезультат:Pavel 2Ivan 1Maria 0Пример 2: Пользователи БЕЗ заказовSELECT users.name FROM users LEFT JOIN orders ON users.id = orders.user_id WHERE orders.id IS NULLРезультат:MariaПример 3: Контакты и телефоныТаблица contacts: id=1 name=Pavel, id=2 name=IvanТаблица phones: id=1 contact_id=1 phone=+79991234567SELECT contacts.name, phones.phone FROM contacts LEFT JOIN phones ON contacts.id = phones.contact_idРезультат:Pavel +79991234567Ivan NULLIvan не имеет телефона.### Несколько LEFT JOINМожно объединить несколько таблиц:SELECT u.name, o.total, p.phone FROM users u LEFT JOIN orders o ON u.id = o.user_id LEFT JOIN phones p ON u.id = p.user_id### LEFT JOIN vs RIGHT JOINLEFT JOIN: все строки из левой таблицыRIGHT JOIN: все строки из правой таблицыЭти запросы эквивалентны:SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_idSELECT * FROM orders RIGHT JOIN users ON users.id = orders.user_id### Типичные ошибкиОшибка 1: Условие в WHERE вместо ONЭто превращает LEFT JOIN в INNER JOIN!Ошибка 2: Забыли про NULL значенияПри фильтрации нужно учитывать NULL: WHERE orders.total > 1000 OR orders.id IS NULLОшибка 3: Неправильное условие объединенияУбедитесь, что столбцы правильно связаны.### Производительность LEFT JOINОптимизация:- Используйте индексы на столбцы объединения- Пример: CREATE INDEX idx_orders_user_id ON orders(user_id)- Избегайте LEFT JOIN если достаточно INNER JOIN### Для QA инженераПри тестировании LEFT JOIN проверяйте:- Включены ли все строки из левой таблицы- Корректны ли NULL значения- Правильно ли работает агрегация (COUNT, SUM)- Правильна ли фильтрация по NULL- Производительность на больших таблицах### ЗаключениеLEFT JOIN - один из самых часто используемых типов объединения. Это мощный инструмент для работы с данными из нескольких таблиц. QA инженер должен понимать, как LEFT JOIN работает, чтобы тестировать аналитические запросы и гарантировать, что данные выводятся корректно.

Что такое LEFT JOIN? | PrepBro