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

Что такое LEFT JOIN и RIGHT JOIN?

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

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

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

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

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

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

LEFT JOIN (левое внешнее соединение)

LEFT JOIN возвращает все строки из левой таблицы (указанной в FROM), и только те строки из правой таблицы, которые соответствуют условию соединения. Если совпадений нет, то столбцы правой таблицы заполняются значениями NULL.

Пример LEFT JOIN:

SELECT 
    employees.name, 
    departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

В этом запросе:

  • Левая таблицаemployees.
  • Правая таблицаdepartments.
  • Результат будет содержать всех сотрудников, даже если они не прикреплены к какому-либо отделу (в этом случае department_name будет NULL).

RIGHT JOIN (правое внешнее соединение)

RIGHT JOIN — это зеркальная операция: она возвращает все строки из правой таблицы, и только те строки из левой таблицы, которые соответствуют условию соединения. Если совпадений нет, то столбцы левой таблицы заполняются NULL. Фактически, RIGHT JOIN можно рассматривать как LEFT JOIN, где таблицы поменяны местами.

Пример RIGHT JOIN:

SELECT 
    employees.name, 
    departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

Здесь:

  • Левая таблицаemployees.
  • Правая таблицаdepartments.
  • Результат будет содержать все отделы, даже если в них нет сотрудников (в этом случае name будет NULL).

Ключевые отличия и важные замечания

  • Направление соединения: LEFT JOIN "защищает" левую таблицу, RIGHT JOIN — правую.
  • Эквивалентность: Любой RIGHT JOIN можно переписать как LEFT JOIN, поменяв таблицы местами. Например, последний пример эквивалентен:
    SELECT 
        employees.name, 
        departments.department_name
    FROM departments
    LEFT JOIN employees ON departments.id = employees.department_id;
    
  • Использование на практике: LEFT JOIN используется гораздо чаще, чем RIGHT JOIN, так как запросы обычно строятся от основной таблицы (например, от заказов к клиентам). RIGHT JOIN может быть полезен в сложных запросах с несколькими соединениями для удобства чтения.
  • Влияние на производительность: С точки зрения производительности, оба соединения работают аналогично. Оптимизатор SQL часто преобразует их в наиболее эффективный план выполнения. Однако важно:
    • Правильно индексировать столбцы, используемые в условии ON.
    • Избегать соединений по неиндексированным полям или по вычисляемым значениям.

Визуализация на примере

Представим две таблицы:

Таблица A (employees)

idnamedept_id
1Иван10
2МарияNULL

Таблица B (departments)

iddept_name
10IT
20HR

Результат LEFT JOIN (A LEFT JOIN B):

namedept_name
ИванIT
МарияNULL

Результат RIGHT JOIN (A RIGHT JOIN B):

namedept_name
ИванIT
NULLHR

В автоматизации тестирования понимание этих операций критически важно для:

  • Проверки корректности данных в отчетах и выборках.
  • Написания сложных SQL-запросов в тестах баз данных.
  • Анализа полноты данных (например, убедиться, что все заказы имеют клиентов, или выявить "сиротские" записи).
Что такое LEFT JOIN и RIGHT JOIN? | PrepBro