Перейти к основному содержимому

SQL RIGHT JOIN

Не самый любимый ребенок: правое соединение. В отличие от левых соединений, которые возвращают все строки из объекта базы данных в операторе FROM, независимо от совпадения в объекте левого соединения, правые соединения возвращают все строки в объекте базы данных правого соединения, независимо от совпадения в объекте базы данных в операторе FROM.

Что вам действительно нужно знать: вы можете достичь всего, что делает правое соединение, с помощью левого соединения, и левые соединения обычно более читаемы и интуитивно понятны. Однако мы все же покажем вам, как использовать правые соединения, и объясним, почему мы считаем, что левые соединения лучше 😉

Как создать правое соединение

Как и для всех соединений, вам понадобятся некоторые объекты базы данных (например, таблицы/представления), ключи для соединения и оператор select для выполнения правого соединения:

select
<fields>
from <table_1> as t1
right join <table_2> as t2
on t1.id = t2.id

В приведенном выше примере используется только одно поле из каждой таблицы для их соединения; если вы соединяете два объекта базы данных, которые требуют нескольких полей, вы можете использовать операторы AND/OR, и, предпочтительно, суррогатные ключи. Вы также можете добавить WHERE, GROUP BY, ORDER BY, HAVING и другие операторы после ваших соединений для создания фильтрации, упорядочивания и выполнения агрегаций. Вы можете использовать правое (или любое другое) соединение столько раз, сколько вам нужно, в одном запросе или .

Пример правого соединения в SQL

Таблица A car_type

user_idcar_type
1van
2sedan
3truck

Таблица B car_color

user_idcar_color
1red
3green
4yellow
select
car_type.user_id as user_id,
car_type.car_type as type,
car_color.car_color as color
from {{ ref('car_type') }} as car_type
right join {{ ref('car_color') }} as car_color
on car_type.user_id = car_color.user_id

Этот простой запрос вернет все строки из Таблицы B и добавит столбец color к строкам, где есть успешное совпадение с Таблицей A:

user_idtypecolor
1vanred
3truckgreen
4nullyellow

Поскольку в Таблице A нет user_id = 4, тип недоступен, поэтому в столбце type для user_id 4 будет результат null. Поскольку в Таблице B нет user_id = 2, и этот идентификатор отсутствует в объекте базы данных правого соединения, строки с user_id 2 не будут возвращены.

Примеры использования правого соединения в SQL

По сравнению с левыми соединениями, вы, вероятно, не так часто (или вообще) увидите правые соединения в работе по моделированию данных и аналитической инженерии. Но почему?

Просто потому, что правые соединения немного менее интуитивны, чем левые. Когда вы моделируете данные, вы обычно сосредотачиваетесь на одном объекте базы данных и добавляете дополнительные данные или таблицы, которые вам нужны для получения окончательного набора данных. Этот один основной объект базы данных обычно помещается в from {{ ref('my_database_object')}}; любые другие столбцы, которые присоединяются к нему из других таблиц, обычно являются дополнительными, но сохранение всех строк из начальной таблицы фокуса обычно является приоритетом. Не поймите нас неправильно — правые соединения могут помочь вам в этом, но они, вероятно, просто немного менее интуитивны и могут усложнить запросы, которые включают несколько соединений.

0