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_id | car_type |
---|---|
1 | van |
2 | sedan |
3 | truck |
Таблица B car_color
user_id | car_color |
---|---|
1 | red |
3 | green |
4 | yellow |
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_id | type | color |
---|---|---|
1 | van | red |
3 | truck | green |
4 | null | yellow |
Поскольку в Таблице A нет user_id
= 4, тип недоступен, поэтому в столбце type
для user_id
4 будет результат null. Поскольку в Таблице B нет user_id
= 2, и этот идентификатор отсутствует в объекте базы данных правого соединения, строки с user_id
2 не будут возвращены.
Примеры использования правого соединения в SQL
По сравнению с левыми соединениями, вы, вероятно, не так часто (или вообще) увидите правые соединения в работе по моделированию данных и аналитической инженерии. Но почему?
Просто потому, что правые соединения немного менее интуитивны, чем левые. Когда вы моделируете данные, вы обычно сосредотачиваетесь на одном объекте базы данных и добавляете дополнительные данные или таблицы, которые вам нужны для получения окончательного набора данных. Этот один основной объект базы данных обычно помещается в from {{ ref('my_database_object')}}
; любые другие столбцы, которые присоединяются к нему из других таблиц, обычно являются дополнительными, но сохранение всех строк из начальной таблицы фокуса обычно является приоритетом. Не поймите нас неправильно — правые соединения могут помочь вам в этом, но они, вероятно, просто немного менее интуитивны и могут усложнить запросы, которые включают несколько соединений.