LEFT JOIN и RIGHT JOIN
LEFT JOIN и RIGHT JOIN – это типы соединений в SQL, которые позволяют объединять строки из двух таблиц, сохраняя все строки из одной из них и соответствующие строки из другой. Они отличаются тем, какие строки будут возвращены в случае отсутствия соответствий.
LEFT JOIN (или LEFT OUTER JOIN)
LEFT JOIN возвращает все строки из левой таблицы и только те строки из правой таблицы, которые соответствуют условию соединения. Если в правой таблице нет соответствующих строк, то для этих строк будут возвращены NULL
значения.
Синтаксис
table1
: Левая таблица, все строки из которой будут включены в результат.table2
: Правая таблица, из которой будут включены только совпадающие строки.
Пример
Рассмотрим таблицы employees
и departments
, как в примере с INNER JOIN
.
Таблица employees
employees
employee_id | name | department_id |
---|---|---|
1 | Alice | 10 |
2 | Bob | 20 |
3 | Charlie | 30 |
4 | David | NULL |
Таблица departments
departments
department_id | department_name |
---|---|
10 | HR |
20 | IT |
Запрос с использованием LEFT JOIN
:
Результат запроса
name | department_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
значения.
Синтаксис
table1
: Левая таблица, из которой будут включены только совпадающие строки.table2
: Правая таблица, все строки из которой будут включены в результат.
Пример
Используем те же таблицы employees
и departments
.
Запрос с использованием RIGHT JOIN
:
Результат запроса
name | department_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