LEFT JOIN и RIGHT JOIN

LEFT JOIN и RIGHT JOIN – это типы соединений в SQL, которые позволяют объединять строки из двух таблиц, сохраняя все строки из одной из них и соответствующие строки из другой. Они отличаются тем, какие строки будут возвращены в случае отсутствия соответствий.

LEFT JOIN (или LEFT OUTER JOIN)

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

Синтаксис

SELECT columns
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;
  • table1: Левая таблица, все строки из которой будут включены в результат.

  • table2: Правая таблица, из которой будут включены только совпадающие строки.

Пример

Рассмотрим таблицы employees и departments, как в примере с INNER JOIN.

Таблица employees

employee_idnamedepartment_id

1

Alice

10

2

Bob

20

3

Charlie

30

4

David

NULL

Таблица departments

department_iddepartment_name

10

HR

20

IT

Запрос с использованием LEFT JOIN:

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

Результат запроса

namedepartment_name

Alice

HR

Bob

IT

Charlie

NULL

David

NULL

Объяснение: В результате включены все сотрудники из таблицы employees. Для сотрудника Charlie нет соответствующего отдела в таблице departments, поэтому в столбце department_name будет NULL. Сотрудник David не имеет значения в department_id, поэтому для него также будет NULL.

RIGHT JOIN (или RIGHT OUTER JOIN)

RIGHT JOIN возвращает все строки из правой таблицы и только те строки из левой таблицы, которые соответствуют условию соединения. Если в левой таблице нет соответствующих строк, то для этих строк будут возвращены NULL значения.

Синтаксис

SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column;
  • table1: Левая таблица, из которой будут включены только совпадающие строки.

  • table2: Правая таблица, все строки из которой будут включены в результат.

Пример

Используем те же таблицы employees и departments.

Запрос с использованием RIGHT JOIN:

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

Результат запроса

namedepartment_name

Alice

HR

Bob

IT

NULL

Marketing

Объяснение: В результате включены все отделы из таблицы departments. Для отдела Marketing нет сотрудников в таблице employees, поэтому в столбце name будет NULL.

Сравнение LEFT JOIN и RIGHT JOIN

  • LEFT JOIN: Все строки из левой таблицы, а соответствующие строки из правой таблицы, или NULL, если соответствие отсутствует.

  • RIGHT JOIN: Все строки из правой таблицы, а соответствующие строки из левой таблицы, или NULL, если соответствие отсутствует.

В большинстве случаев можно использовать LEFT JOIN и RIGHT JOIN взаимозаменяемо, изменяя порядок таблиц, но LEFT JOIN чаще используется, так как позволяет легко сконцентрироваться на основной таблице.

Last updated