Join sql примеры: Оператор SQL LEFT JOIN: синтаксис, примеры

SQL оператор JOINS — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

В этом учебном материале вы узнаете, как использовать SQL JOINS с синтаксисом и примерами.

Описание

SQL JOINS используются для извлечения данных из нескольких таблиц. SQL JOIN выполняется всякий раз, когда две или более таблицы перечислены в операторе SQL.

Существует 4 различных типа соединений SQL:

  • SQL INNER JOIN (иногда называется простым соединением)
  • SQL LEFT OUTER JOIN (иногда называется LEFT JOIN)
  • SQL RIGHT OUTER JOIN (иногда называется RIGHT JOIN)
  • SQL FULL OUTER JOIN (иногда называется FULL JOIN)

Итак, давайте обсудим синтаксис SQL JOIN, рассмотрим наглядные иллюстрации SQL JOINS и рассмотрим несколько примеров.

SQL INNER JOIN (простое соединение)

Скорее всего, вы уже писали SQL запрос, который использует SQL INNER JOIN. Это наиболее распространенный тип соединения SQL. INNER JOIN возвращает все строки из нескольких таблиц, где выполняется условие соединения.

Синтаксис

Синтаксис INNER JOIN в SQL:

SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;

Рисунок.

На этом рисунке SQL INNER JOIN возвращает затененную область:

SQL INNER JOIN будет возвращать записи, где пересекаются table1 и table2.

Пример

Давайте рассмотрим пример использования INNER JOIN в запросе.

В этом примере у нас есть таблица customer и следующими данными:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000 MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle. com

И таблица orders со следующими данными:

order_idcustomer_idorder_date
170002019/06/18
250002019/06/18
380002019/06/19
440002019/06/20
5NULL2019/07/01

Выполним следующий SQL оператор:

SELECT customers.customer_id,
orders.order_id,
orders.order_date
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id
ORDER BY customers.customer_id;


1

2

3

4

5

6

7

SELECT customers.customer_id,

       orders.order_id,

   orders.order_date

  FROM customers

INNER JOIN orders

    ON customers. customer_id = orders.customer_id

ORDER BY customers.customer_id;

Будет выбрано 4 записи. Вот результаты, которые вы должны получить:

customer_idorder_idorder_date
400042019/06/20
500022019/06/18
700012019/06/18
800032019/06/19

В этом примере будут возвращены все строки из таблиц customers и orders, в которых совпадают значения поля customer_id в обоих таблицах.

Строки, где значение customer_id равен 6000 и 9000 в таблице customers, будут опущены, поскольку они не существуют в обеих таблицах. Строка, в которой значение order_id равно 5 из таблицы orders, будет опущена, поскольку customer_id со значением NULL не существует в таблице customers.

SQL LEFT OUTER JOIN

Другой тип соединения называется LEFT OUTER JOIN. Этот тип соединения возвращает все строки из таблиц с левосторонним соединением, указанным в условии ON, и только те строки из другой таблицы, где объединяемые поля равны (выполняется условие соединения).

Синтаксис

Синтаксис для LEFT OUTER JOIN в SQL:

SELECT columns
FROM table1
LEFT [OUTER] JOIN table2
ON table1.column = table2.column;

В некоторых базах данных ключевое слово OUTER опущено и записывается просто как LEFT JOIN.

Рисунок

На этом рисунке SQL LEFT OUTER JOIN возвращает затененную область:

SQL LEFT OUTER JOIN возвращает все записи из table1 и только те записи из table2, которые пересекаются с table1.

Пример

Теперь давайте рассмотрим пример, который показывает, как использовать LEFT OUTER JOIN в операторе SELECT.

Используя ту же таблицу customers, что и в предыдущем примере:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle. com
5000SelenaGomezbing.com
6000 MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

И таблицу orders со следующими данными:

order_idcustomer_idorder_date
170002019/06/18
250002019/06/18
380002019/06/19
440002019/06/20
5NULL2019/07/01

Введите следующий SQL оператор:

SELECT customers.customer_id,
orders.order_id,
orders.order_date
FROM customers
LEFT OUTER JOIN orders
ON customers. customer_id = orders.customer_id
ORDER BY customers.customer_id;


1

2

3

4

5

6

7

SELECT customers.customer_id,

       orders.order_id,

       orders.order_date

  FROM customers

  LEFT OUTER JOIN orders

    ON customers.customer_id = orders.customer_id

ORDER BY customers.customer_id;

Будет выбрано 6 записей. Вот результаты, которые вы получите:

customer_idorder_idorder_date
400042019/06/20
500022019/06/18
6000NULLNULL
700012019/06/18
800032019/06/19
9000NULLNULL

Этот пример LEFT OUTER JOIN вернул бы все строки из таблицы customers и только те строки из таблицы orders, в которых объединенные поля равны.

Если значение customer_id в таблице customers не существует в таблице orders, все поля таблицы orders будут отображаться как NULL в наборе результатов. Как вы можете видеть, строки, где customer_id равен 6000 и 9000, будут включены в LEFT OUTER JOIN, но поля order_id и order_date отображают NULL.

SQL RIGHT OUTER JOIN JOIN

Другой тип соединения называется SQL RIGHT OUTER JOIN. Этот тип соединения возвращает все строки из таблиц с правосторонним соединением, указанным в условии ON, и только те строки из другой таблицы, где объединяемые поля равны (выполняется условие соединения).

Синтаксис

Синтаксис для RIGHT OUTER JOIN в SQL:

SELECT columns
FROM table1
RIGHT [OUTER] JOIN table2
ON table1.column = table2.column;

В некоторых базах данных ключевое слово OUTER опущено и записывается просто как RIGHT JOIN.

Рисунок

На этом рисунке SQL RIGHT OUTER JOIN возвращает затененную область:

SQL RIGHT OUTER JOIN возвращает все записи из table2 и только те записи из table1, которые пересекаются с table2.

Пример

Теперь давайте рассмотрим пример, который показывает, как использовать RIGHT OUTER JOIN в операторе SELECT.

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000 MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

И таблицу orders со следующими данными:

order_idcustomer_idorder_date
170002019/06/18
250002019/06/18
380002019/06/19
440002019/06/20
5NULL2019/07/01

Введите следующий SQL оператор:

SELECT customers. customer_id,
orders.order_id,
orders.order_date
FROM customers
RIGHT OUTER JOIN orders
ON customers.customer_id = orders.customer_id
ORDER BY customers.customer_id;


1

2

3

4

5

6

7

SELECT customers.customer_id,

   orders.order_id,

   orders.order_date

  FROM customers

RIGHT OUTER JOIN orders

    ON customers.customer_id = orders.customer_id

ORDER BY customers.customer_id;

Будет выбрано 5 записей. Вот результаты, которые вы должны получить:

customer_idorder_idorder_date
NULL52019/07/01
400042019/06/20
500022019/06/18
700012019/06/18
800032019/06/19

Этот пример RIGHT OUTER JOIN вернул бы все строки из таблицы orders и только те строки из таблицы customers, где объединенные поля равны.

Если значение customer_id в таблице orders не существует в таблице customers, то все поля в таблице customers будут отображаться как NULL в наборе результатов. Как видите, строка, где order_id равен 5, будет включена в RIGHT OUTER JOIN, но в поле customer_id отображается NULL.

SQL FULL OUTER JOIN

Другой тип объединения называется SQL FULL OUTER JOIN. Этот тип объединения возвращает все строки из LEFT таблицы и RIGHT таблицы со значениями NULL в месте, где условие соединения не выполняется.

Синтаксис

Синтаксис для SQL FULL OUTER JOIN:

SELECT columns
FROM table1
FULL [OUTER] JOIN table2
ON table1.column = table2.column;

В некоторых базах данных ключевое слово OUTER опускается и записывается просто как FULL JOIN.

Рисунок

На этом рисунке SQL FULL OUTER JOIN возвращает затененную область:

SQL FULL OUTER JOIN возвращает все записи из таблиц table1 и table2.

Пример

Давайте рассмотрим пример, который показывает, как использовать FULL OUTER JOIN в операторе SELECT.

Используя ту же таблицу customers, что и в предыдущем примере:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000 MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

И таблицу orders со следующими данными:

order_idcustomer_idorder_date
170002019/06/18
250002019/06/18
380002019/06/19
440002019/06/20
5NULL2019/07/01

Введите следующий SQL оператор:
SELECT customers. customer_id,
orders.order_id,
orders.order_date
FROM customers
FULL OUTER JOIN orders
ON customers.customer_id = orders.customer_id
ORDER BY customers.customer_id;

Будет выбрано 7 записей. Вот результаты, которые вы получите:

customer_idorder_idorder_date
NULL52019/07/01
400042019/06/20
500022019/06/18
6000NULLNULL
700012019/06/18
800032019/06/19
9000NULLNULL

Это пример FULL OUTER JOIN будет возвращать все строки из таблицы orders и все строки из таблицы customers. Всякий раз, когда условие соединения не выполняется, значение NULL будет распространяться на эти поля в наборе результатов. Это означает, что если значение customer_id в таблице customers не существует в таблице orders, то все поля в таблице orders будут отображаться в наборе результатов как NULL Кроме того, если значение customer_id в таблице orders не существует в таблице customers, то все поля в таблице customers будут отображаться в наборе результатов как NULL.

Как видите, строки, где customer_id равен 6000 и 9000, будут включены, но поля order_id и order_date для этих записей содержат значение NULL. Строка, где order_id равен 5, также будет включена, но поле customer_id для этой записи имеет значение NULL.

Объединение таблиц при запросе (JOIN) в SQL

С помощью команды SELECT можно выбрать данные не только из одной таблицы, но и нескольких. Такая задача появляется довольно часто, потому что принято разносить данные по разным таблицам в зависимости от хранимой в них информации. К примеру, в одной таблице хранится информация о пользователях, во второй таблице о должностях компании, а в третьей и четвёртой о поставщиках и клиентах. Данные разбивают на таблицы так, чтобы с одной стороны получить самую высокую скорость выполнения запроса, а с другой стороны избежать ненужных объединений, которые снижают производительность.


Чем больше столбцов в таблице — тем сильнее падает скорость выборки из неё. Поэтому стараются делать в каждой таблице не больше 5-10 столбцов. Но чем сильнее данные разбиваются на разные таблицы, тем больше придётся делать объединений внутри запросов, что тоже снизит скорость получения выборки и увеличит нагрузку на базу.



Приведём пример запроса с объединением данных из двух таблиц. Для этого предположим, что существует две таблицы. Первая таблица будет иметь название USERS и будет иметь два столбца: ID и именами пользователей:

+-----------+
|   USERS   |
+-----------+
| ID | NAME |
+----+------+
| 1  | Мышь |
+----+------+
| 2  | Кот  |
+----+------+



Вторая таблица будет называться FOOD и будет содержать два столбца: USER_ID и NAME. В этой таблице будет содержаться список любимых блюд пользователей из первой таблицы. В столбце USER_ID содержится ID пользователя, а в столбце PRODUCT находится название любимого блюда.

+-------------------+
|        FOOD       |
+-------------------+
| USER_ID | PRODUCT |
+---------+---------+
| 1       | Сыр     |
+---------+---------+
| 2       | Молоко  |
+---------+---------+



Условимся что поле ID в таблице USERS и поле USER_ID в таблице FOOD являются первичными ключами (то есть имеют уникальные значения, которые не повторяются). Теперь попробуем использовать логику и найти любимое блюдо пользователя «Мышь», используя обе таблицы. Для этого мы сначала посмотрим в первую таблицу и найдём ID пользователя под именем «Мышь», а затем найдём название продукта под таким же ID во второй таблице. Объединяющие SQL запросы работают по такой же логике: нужен столбец, в по которому таблицы могут быть объединены.

Продемонстрируем запрос, объединяющий таблицы по столбцам ID и USER_ID:

SELECT * FROM `USERS` INNER JOIN `FOOD` ON `USERS`. `ID`=`FOOD`.`USER_ID`;



Разберём команду по словам. Начинается она как обычная выборка из одной таблицы со слов «SELECT * FROM USERS». Но затем идёт слово INNER, которое означает тип объединения. Существует три типа объединения таблиц: INNER, LEFT, RIGHT. Все они связаны с тем, что некоторым строкам в одной таблице может не найтись соответствующей строки во второй таблице. В таком случае при использовании «INNER» из результатов запроса будет удалены все строки, которым не нашлась соответствующая пара в другой таблице. Если же использовать вместо «INNER» слово «LEFT» или «RIGHT», то будут удалены строки, которые не нашли совпадение из первой (левой) или второй (правой) таблицы.

После слова «INNER» стоит слово «JOIN» (которое переводится с английского как «ПРИСОЕДИНИТЬ»). После слова «JOIN» стоит название таблицы, которая будет присоединена. В нашем случае это таблица FOOD. После названия таблицы стоит слово «ON» и равенство USERS. ID=FOOD.USER_ID, которое задаёт правило присоединения. При выполнении выборки будут объединены две таблицы так, чтобы значения в столбце ID таблицы USERS равнялось значению USER_ID таблицы FOOD.

В результате выполнения этого SQL запроса мы получим таблицу с четырьмя столбцами:

+----+------+---------+---------+
| ID | NAME | USER_ID | PRODUCT |
+----+------+---------+---------+
| 1  | Мышь | 1       | Сыр     |
+----+------+---------+---------+
| 2  | Кот  | 2       | Молоко  |
+----+------+---------+---------+



Предлагаем модифицировать запрос, потому что нам не нужны все четыре столбца. Уберём столбцы ID и USER_ID. Для этого вместо * в команде SELECT поставим название столбцов. Но необходимо сделать это, ставя сначала название таблицы и через точку название столбца. Чтобы получилось так:

SELECT `USERS`.`NAME`, `FOOD`.`PRODUCT` 
FROM `USERS` INNER JOIN `FOOD` ON `USERS`. `ID`=`FOOD`.`USER_ID`;



Теперь результат будет компактнее. И благодаря уменьшенному количеству запрашиваемых данных, результат будет получаться из базы быстрее:

+------+---------+
| NAME | PRODUCT |
+------+---------+
| Мышь | Сыр     |
+------+---------+
| Кот  | Молоко  |
+------+---------+


Если в двух таблицах имеются столбцы с одинаковыми названиями, то будет показан только последний столбце с таким названием. Чтобы этого не происходило, выбирайте определённый столбцы и используйте команду «AS» с помощью которой можно переименовать столбец в результатах выборки.



Давайте теперь решим логическую задачу, которую поставили в начале статьи. Попробуем выбрать в этой объединённой таблице только одну строку, которая соответствует пользователю «Мышь». Для этого используем условие WHERE в SQL запросе:

SELECT `USERS`. `NAME`, `FOOD`.`PRODUCT` 
FROM `USERS` INNER JOIN `FOOD` ON `USERS`.`ID`=`FOOD`.`USER_ID`
WHERE `USERS`.`NAME` LIKE 'Мышь';



Обратите внимание, что в условии WHERE название полей так же необходимо ставить вместе с названием таблицы через точку: USERS.NAME. В результате выполнения этого запроса появится такой результат:

+------+---------+
| NAME | PRODUCT |
+------+---------+
| Мышь | Сыр     |
+------+---------+



Отлично! Теперь мы знаем, как делать объединение таблиц.

Была ли эта статья полезна?

Есть вопрос?

Закажите недорогой хостинг

Заказать

всего от 290 руб

Соединения SQL — типы, синтаксис и примеры

В этом руководстве будут рассмотрены следующие темы:

  • Что такое соединения в SQL?
  • Синтаксис соединения SQL
  • Пример соединения SQL
  • типов соединений SQL
    • Внутренние соединения в SQL
    • Левые соединения в SQL
    • Правые соединения в SQL
    • ПОЛНЫЕ соединения в SQL

Повысьте свои навыки SQL сегодня с помощью нашего видео о соединениях SQL. Смотри!

Что такое объединения в SQL?

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

Синтаксис соединения SQL

Объединение SQL (также называемое INNER JOIN) — это наиболее часто используемый метод объединения данных из нескольких таблиц. Синтаксис SQL Join приведен ниже:

Рассмотрим приведенный ниже пример, синтаксис, используемый для объединения данных из этих таблиц, будет следующим:

 ВЫБЕРИТЕ Имя, Город, Метки, Телефон_номер
ОТ Student_detail, Personal_detail
ГДЕ Student_details.Name=Personal_detail.Name; 

Пример соединения SQL:

Теперь давайте разберемся с соединением SQL с помощью подробного примера:

Рассмотрим эту таблицу, показывающую сведения об ученике:

6

Имя Рулон № Знаки
Акшай 1 57
Чару 2 68
Диша 3 52
Ева 4 68
Химаншу 5 75
Джитеш 6 88

Ниже приведена другая таблица с личными данными:

Имя Город Номер телефона Идентификатор электронной почты
Акшай Джайпур 9543846521 [электронная почта защищена]
Диша Бомбей 8532465892 [электронная почта защищена]
Джитеш Банглор 9684365125 [электронная почта защищена]

Подготовьтесь к работе в отрасли, ответив на эти лучшие вопросы и ответы на собеседовании по SQL!

Теперь, используя следующий синтаксис, две таблицы объединяются в новую таблицу, которая показывает имя учащегося, его/ее город, полученные оценки и номер телефона.

 ВЫБЕРИТЕ Имя, Город, Знаки, Телефон_номер
ОТ Student_detail, Personal_detail
ГДЕ Student_details.Name=Personal_detail.Name;
 

Результат приведенного выше синтаксиса соединения SQL приведен ниже:

Имя Город Знаки Номер телефона
Акшай Джайпур 57 9543846521
Диша Бомбей 52 8532465892
Джитеш Банглор 88 9684365125

Типы соединений SQL

В SQL доступны различные типы соединений:

  • Внутреннее соединение в SQL
  • Левое соединение в SQL
  • Правое соединение в SQL
  • Полное соединение в SQL

Внутренние соединения в SQL:

Внутренний запрос на соединение SQL возвращает значение, если в обеих таблицах есть совпадения. Внутреннее соединение является наиболее часто используемым методом, когда речь идет о соединении таблиц. Термины «внутреннее соединение» и «соединение SQL» иногда используются как синонимы. Ниже приведен синтаксис для внутреннего соединения. Это также тот же синтаксис, который используется в случае SQL Join.

Синтаксис:

 SELECT Column_list
ИЗ ТАБЛИЦЫ 1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТАБЛИЦА 2
ON Table1.ColName = Table2.ColName 

Пример: 

 SELECT student_data.RollNo, student_data.Name, student_data.Address, student_mark.Marks, student_mark.Grade
ОТ student_data
ВНУТРЕННЕЕ СОЕДИНЕНИЕ student_mark ON student_data.RollNo = student_mark.RollNo; 

Левые соединения в SQL:

Левое соединение SQL возвращает все значения левой таблицы и сопоставляет строки из правой таблицы. Теперь, если с правой стороны нет совпадающего значения, левое соединение вернет значение с правой стороны как NULL. В большинстве случаев результат левого соединения почти такой же, как и результат правого соединения, за исключением того, что включаются все строки из левой таблицы.

Синтаксис:

 SELECT имя_столбца
ИЗ таблицы1
ЛЕВОЕ СОЕДИНЕНИЕ таблица2
ON table1.column_name=table2.column_name;
 

Пример:

 SELECT Student_details.Name, Address, Roll_no, Email_id
ОТ Student_details
ВЛЕВО ПРИСОЕДИНЯЙСЯ
ON Student_details.Name= Personal_details.Name;
 

У нас есть идеальный курс профессионального обучения SQL для вас!

Имя Рулон № Адрес Идентификатор электронной почты
Акшай 1 Джайпур [электронная почта защищена]
Чару 2 НУЛЕВОЙ НУЛЕВОЙ
Диша 3 Бомбей [электронная почта защищена]
Ева 4 НУЛЕВОЕ НУЛЕВОЙ
Химаншу 5 НУЛЕВОЙ НУЛЕВОЙ
Джитеш 6 Банглор [электронная почта защищена]

Узнайте, как освоить объединение SQL для вашего следующего интервью, в нашем блоге вопросов для интервью SQL Join.

Правые соединения в SQL:

Правое соединение SQL возвращает все строки правой таблицы, даже если в левой таблице нет совпадений. По сути, правое соединение вернет все значения из правой таблицы вместе с соответствующими значениями из левой таблицы. Кроме того, если совпадающее значение не найдено, результатом будет NULL.

Синтаксис:

 SELECT имя_столбца
ИЗ таблицы1
ПРАВОЕ СОЕДИНЕНИЕ таблица2
ON table1.column_name=table2.column_name;
 

Пример:

 SELECT Personal_details.Name, Address, Roll_no, Email_id
ОТ Student_details
ПРИСОЕДИНЯЙТЕСЬ ПРАВО Personal_details
 

Приходите в сообщество SQL Intellipaat, если у вас есть еще вопросы по SQL!

 ON Student_details.Name= Personal_details.Name; 
Имя Адрес Рулон № Идентификатор электронной почты
Акшай Джайпур 1 [электронная почта защищена]
Диша Бомбей 3 [электронная почта защищена]
Джитеш Банглор 6 Цзи[email protected]

Полное соединение в SQL:

Полное соединение SQL Запрос возвращает все строки из левой и правой таблиц. Результирующий набор создается путем объединения всех строк обеих таблиц. Результаты LEFT JOIN и RIGHT JOIN объединяются для получения результата FULL JOIN.

Синтаксис:

 SELECT имя_столбца
ИЗ таблицы1
ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ table2
ON table1.column_name=table2.column_name;
 

Пример:

 SELECT Student_details.Name, Roll_no, Address
ОТ Student_details
ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Personal_details
ON Student_details.Name= Personal_details.Name; 
Имя Рулон № Адрес
Акшай 1 Джайпур
Чару 2 НУЛЕВОЙ
Диша 3 Бомбей
Ева 4 НУЛЕВОЙ
Химаншу 5 НУЛЕВОЙ
Джитеш 6 Банглор

Хотите пройти сертификацию по SQL! Изучайте SQL у лучших экспертов по SQL и добейтесь успеха в своей карьере благодаря сертификации Intellipaat по SQL.

Расписание курсов

Типы соединений SQL, поясняемые в визуальных материалах

Последнее изменение: 05 апреля 2023 г.

Слияние двух наборов данных с помощью SQL или инструментов SQL можно выполнить с помощью JOINS. JOIN — это инструкция SQL в предложении FROM вашего запроса, которая используется для идентификации таблиц, которые вы запрашиваете, и того, как их следует объединять.

Первичный и внешний ключи

Обычно в реляционной базе данных данные организованы в различные таблицы, состоящие из атрибутов (столбцы) и записей (строки). В каждой таблице есть столбец, который является первичный ключ , который представляет собой столбец, в котором каждая запись однозначно представляет одну строку в этой таблице. Обычно это столбец ID (сокращение от идентификатора). Столбец в таблице, который устанавливает ассоциацию с первичным ключом другой таблицы через общие значения, называется внешним ключом . Внешние ключи также обычно называются идентификаторами, но перед ними стоит имя таблицы, на которую ссылаются.

Эта концепция применяется при объединении двух или более таблиц с помощью JOIN. В приведенном ниже примере у нас есть две таблицы: таблица пользователей (таблица 1) и таблица событий (таблица 2). Мы хотим соединить две таблицы вместе, чтобы получить пользовательские данные вместе с данными их событий. Реальным примером этого может быть, если у вас есть данные из инструмента CRM, такого как Salesforce, содержащие пользователей, которые являются платными клиентами (таблица 1), и инструмент аналитики событий, такой как Mixpanel, который отслеживает всех пользователей, которые выполнили действие в вашем продукте ( Таблица 2).

Обратите внимание, что между двумя таблицами есть общий столбец (измерение), выделенный зеленым цветом, User ID. В таблице пользователей столбец идентификатора является идентификатором пользователя и первичным ключом для этой таблицы, тогда как в таблице событий столбец User_ID является внешним ключом, поскольку этот столбец ссылается на столбец идентификатора в таблице пользователей. Мы можем использовать эту связь, чтобы соединить две таблицы вместе, чтобы получить информацию о пользователе и событиях в одной таблице.

Познакомьтесь с соединениями

Существует три распространенных способа объединения любых двух или более таблиц, о которых мы поговорим в первую очередь: Внешнее соединение , Внутреннее соединение и Левое соединение . Используя приведенные выше таблицы User и Event , давайте рассмотрим несколько примеров объединений…

Внешнее соединение

Допустим, вы хотите иметь таблицу, содержащую все ваши данные о пользователях и таблицах событий.

Вы должны использовать внешнее соединение , чтобы соединить таблицы вместе. Внешнее соединение по возможности объединяет столбцы из всех таблиц в одном или нескольких общих измерениях и включает все данные из всех таблиц.

Для более подробного ознакомления с внешним соединением щелкните здесь.

Внутреннее соединение

Что делать, если вы хотите иметь таблицу, содержащую только пользователей, которые выполнили действие?

Вы должны использовать внутреннее соединение , чтобы соединить таблицы вместе. Внутреннее соединение объединяет столбцы в общем измерении (первые N столбцов), когда это возможно, и включает только данные для столбцов, которые имеют одинаковые значения в общем N столбце (столбцах). В этом примере идентификатор пользователя будет общим параметром, используемым для внутреннего соединения.

Для более подробного ознакомления с внутренним соединением щелкните здесь.

Левое соединение

Что, если вы хотите иметь таблицу, содержащую все данные о пользователях и только действия, выполненные этими пользователями? Действия, выполненные другими пользователями, которых нет в таблице пользователей, не должны быть включены?

Вы должны использовать левое соединение , чтобы соединить таблицы вместе. Левое соединение по возможности объединяет столбцы в общем измерении (первые N столбцов), возвращая все строки из первой таблицы с соответствующими строками в последующих таблицах. Результат NULL в последовательных таблицах, когда совпадений нет. В этом случае мы бы сделали таблицу пользователей первой (левой таблицей), используемой для левого соединения.

Для более подробного ознакомления с левым соединением щелкните здесь.

Соединение и перекрестное соединение

В дополнение к этим распространенным типам соединений существуют некоторые методы, которые приводят к дополнительным строкам в выходной таблице, а также к большему количеству столбцов. Два из этих типов соединений называются Union и Cross Join . Эти типы соединений, вероятно, не подходят для наших примеров таблиц выше, но ради этой статьи мы все же можем использовать их, чтобы увидеть, как работают эти соединения. А Union Join будет располагать таблицы друг над другом, что приведет к появлению новых строк.