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

Что такое OUTER JOIN?

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

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

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

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

# OUTER JOIN в SQL

OUTER JOIN — это операция объединения двух таблиц в SQL, которая сохраняет записи из одной или обеих таблиц даже если условие JOIN не найдено совпадение. Это отличает OUTER JOIN от INNER JOIN, который возвращает только совпадающие записи.

Основные типы OUTER JOIN

LEFT OUTER JOIN (LEFT JOIN)

Возвращает ВСЕ записи из левой таблицы и совпадающие записи из правой. Если совпадения нет, для полей правой таблицы вернутся NULL.

SELECT e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.id;

Если сотрудник не привязан к отделу, поле department_name будет NULL.

RIGHT OUTER JOIN (RIGHT JOIN)

Операция-зеркало LEFT JOIN. Возвращает ВСЕ записи из правой таблицы и совпадающие из левой.

SELECT e.name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.dept_id = d.id;

FULL OUTER JOIN (FULL JOIN)

Возвращает ВСЕ записи из обеих таблиц. Если совпадения нет, соответствующие поля содержат NULL.

SELECT e.name, d.department_name
FROM employees e
FULL OUTER JOIN departments d ON e.dept_id = d.id;

Практическое применение в Java

Когда вы работаете с ORM (Hibernate, JPA), OUTER JOIN часто используется для оптимизации загрузки связанных объектов:

@Entity
public class Employee {
    @Id
    private Long id;
    private String name;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "dept_id")
    private Department department;
}

// Запрос с LEFT JOIN
List<Employee> employees = entityManager
    .createQuery("SELECT e FROM Employee e LEFT JOIN FETCH e.department", Employee.class)
    .getResultList();

Различия между JOIN типами

ТипЗаписи из левойЗаписи из правойNULL значения
INNER JOINТолько совпадающиеТолько совпадающиеНет
LEFT JOINВСЕТолько совпадающиеДа, для правой
RIGHT JOINТолько совпадающиеВСЕДа, для левой
FULL JOINВСЕВСЕДа, для обеих

Производительность

OUTER JOIN может быть медленнее INNER JOIN из-за обработки пустых значений и больших результирующих наборов. Оптимизация:

  • Добавляйте индексы на колонки, используемые в JOIN условиях
  • Используйте EXPLAIN для анализа плана запроса
  • Когда возможно, фильтруйте NULL значения (WHERE department IS NOT NULL)
Что такое OUTER JOIN? | PrepBro