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

Что такое LEFT JOIN?

1.3 Junior🔥 62 комментариев
#Хранение данных

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

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

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

Что такое LEFT JOIN в SQL?

LEFT JOIN (или LEFT OUTER JOIN) — это один из типов операций соединения таблиц в SQL, который позволяет объединять данные из двух таблиц на основе условия совпадения, при этом гарантированно возвращая все строки из левой таблицы, даже если для них нет совпадений в правой таблице. В таких случаях отсутствующие значения из правой таблицы заполняются NULL.

Основной принцип работы

Представьте, что у нас есть две таблицы: Customers (клиенты — левая таблица) и Orders (заказы — правая таблица). Мы хотим получить список всех клиентов, включая тех, у которых нет заказов. Именно здесь необходим LEFT JOIN.

Пример синтаксиса:

SELECT Customers.name, Orders.order_id
FROM Customers
LEFT JOIN Orders ON Customers.id = Orders.customer_id;

В результате:

  • Каждый клиент из Customers будет присутствовать в выборке.
  • Если у клиента есть заказы, будут показаны соответствующие order_id.
  • Если заказов нет, в колонке order_id будет NULL.

Ключевые особенности

  • Сохранение всех записей левой таблицы: Главное отличие от INNER JOIN, который возвращает только совпадающие строки.
  • Заполнение NULL: Отсутствующие данные правой таблицы заменяются на NULL.
  • Порядок имеет значение: LEFT JOIN и RIGHT JOIN — зеркальные операции. Всегда можно заменить RIGHT JOIN на LEFT JOIN, изменив порядок таблиц.

Практический пример с кодом

Допустим, у нас есть две таблицы:

Таблица employees (сотрудники):

idname
1Анна
2Борис
3Виктор

Таблица sales (продажи):

idemployee_idamount
111000
211500
32800

Запрос с LEFT JOIN для получения всех сотрудников и их продаж:

SELECT e.name, s.amount
FROM employees e
LEFT JOIN sales s ON e.id = s.employee_id;

Результат:

nameamount
Анна1000
Анна1500
Борис800
ВикторNULL

Обратите внимание: Виктор без продаж всё равно отображается с NULL в amount.

Когда использовать LEFT JOIN?

  • Аналитика с полным охватом: Например, отчёт по всем пользователям, включая неактивных.
  • Поиск отсутствующих данных: Например, найти клиентов без заказов, добавив условие WHERE right_table.id IS NULL.
SELECT Customers.name
FROM Customers
LEFT JOIN Orders ON Customers.id = Orders.customer_id
WHERE Orders.customer_id IS NULL;
  • Агрегация с учётом всех записей: Например, подсчёт среднего чека, включая клиентов с нулевыми покупками.

Отличия от других JOIN

  • INNER JOIN: Возвращает только совпадающие строки.
  • RIGHT JOIN: Возвращает все строки правой таблицы.
  • FULL OUTER JOIN: Возвращает все строки обеих таблиц.

Важные нюансы

  • Производительность: При больших таблицах LEFT JOIN может быть медленнее INNER JOIN из-за необходимости обработки NULL.
  • Индексы: Для ускорения обязательно индексировать ключи соединения.
  • Читаемость: В сложных запросах явно указывайте, какая таблица левая, а какая правая, чтобы избежать путаницы.

Таким образом, LEFT JOIN — мощный инструмент для работы с неполными данными, обеспечивающий полноту выборки даже при отсутствии связей между таблицами. Его правильное применение позволяет строить гибкие и информативные SQL-запросы в iOS-приложениях при работе с локальными базами данных (Core Data, SQLite) или серверными API, возвращающими реляционные данные.

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