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

SQL INNER JOINS

Самое простое и легкое из SQL соединений: скромное внутреннее соединение. Как следует из его названия, внутреннее соединение между двумя объектами базы данных возвращает все строки, которые имеют совпадающие ключи соединения; любые ключи, которые не совпадают, исключаются из результата запроса.

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

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

select
<fields>
from <table_1> as t1
inner 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
inner join {{ ref('car_color') }} as car_color
on car_type.user_id = car_color.user_id

Этот простой запрос вернет все строки, которые имеют одинаковый user_id в обеих таблицах A и B:

user_idtypecolor
1vanred
3truckgreen

Поскольку в Таблице A нет user_id = 4 и в Таблице B нет user_id = 2, строки с id 2 и 4 (из любой таблицы) исключаются из результатов запроса внутреннего соединения.

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

Существует, вероятно, бесчисленное множество сценариев, когда вам может понадобиться внутреннее соединение нескольких таблиц — возможно, у вас есть очень хорошо структурированные таблицы с точно такими же первичными ключами, которые действительно должны быть одной большой, широкой таблицей, или вы соединяете две таблицы и не хотите, чтобы были нулевые или отсутствующие значения столбцов, если бы вы использовали левое или правое соединение — все это сильно зависит от ваших исходных данных и конечных случаев использования. Там, где вы не увидите (и не должны видеть) внутренние соединения, это в стейджинговых моделях, которые используются для очистки и подготовки сырых исходных данных для аналитических целей. Любые соединения в ваших проектах dbt должны происходить на более поздних этапах в промежуточных и март-моделях для улучшения модульности и чистоты DAG.

0