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

Для чего нужен LEFT JOIN?

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

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

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

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

LEFT JOIN — сохранение всех строк левой таблицы

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

Основная суть

При LEFT JOIN результат содержит:

  • Все строки из левой таблицы (FROM)
  • Соответствующие данные из правой таблицы (если есть)
  • NULL значения для полей правой таблицы, если совпадения не найдено

Простой пример

Есть таблицы пользователей и их заказов:

-- Таблица users
id | name
1  | Alice
2  | Bob
3  | Charlie

-- Таблица orders
id | user_id | amount
101| 1       | 100
102| 1       | 50
103| 2       | 200

Обычный INNER JOIN вернёт только пользователей с заказами:

SELECT u.id, u.name, o.amount
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

LEFT JOIN вернёт всех пользователей, даже без заказов:

SELECT u.id, u.name, o.amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

Практические применения

1. Поиск неактивных пользователей (без заказов)

SELECT u.id, u.name
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.id IS NULL;

2. Статистика по группам с нулевыми значениями

SELECT u.id, u.name, COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;

3. Множественные LEFT JOIN

SELECT 
  u.name,
  COUNT(DISTINCT o.id) as orders,
  COUNT(DISTINCT r.id) as reviews
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
LEFT JOIN reviews r ON u.id = r.user_id
GROUP BY u.id;

Разница между JOIN'ами

  • INNER JOIN → только пересечение
  • LEFT JOIN → все строки левой + совпадения из правой
  • RIGHT JOIN → все строки правой + совпадения из левой
  • FULL JOIN → все строки из обеих таблиц

Важные моменты

  • NULL значения появляются в полях правой таблицы при отсутствии совпадения
  • WHERE условие после LEFT JOIN отличается от условия ON
  • Используй COUNT(DISTINCT) при группировке для избежания дублирования

LEFT JOIN незаменим для аналитики, отчётов и поиска отсутствующих связей в данных.

Для чего нужен LEFT JOIN? | PrepBro