Введение в типы соединений в SQL

Предложение Join в SQL служит для объединения строк из двух или более таблиц. Процесс объединения строк зависит от столбца, который связан с ними. Четыре различных типа объединений в SQL называются внутренним соединением, левым соединением, правым соединением и полным соединением. Прежде чем мы сможем начать использовать соединение любого типа, нам нужна СУБД или система управления реляционными базами данных, в которую мы будем загружать данные. Одним из очень простых способов понять объединения является использование диаграммы Венна. Использование диаграммы Венна позволяет легко оценить все возможные и логические отношения между различными наборами данных. Позвольте нам понять это один за другим, используя диаграмму Венна. Позже мы поймем разницу между ними, используя некоторые практические примеры. Предположим, что в нашей базе данных есть два набора данных, которые хранятся в виде Таблицы 1 и 2. Существует некоторая связь между двумя таблицами, которая указывается в форме первичного ключа и концепции внешнего ключа. Если вы объедините две таблицы, имеющие какую-то связь, представление сценария на диаграмме Венна будет выглядеть примерно так:

Величина этого перекрытия будет определять степень сходства между двумя таблицами, т. Е. Таблицей A и таблицей B. Это означает, что количество записей из первой таблицы, которые соответствуют записям из второй таблицы, представлено разделом перекрытия. Это одна часть данных. Мы получаем четыре различных типа объединений на основе подмножества данных, которые мы выбираем из двух таблиц.

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

SELECT column-names FROM table-name1 JOIN table-name2 ON column-name1 = column-name2 WHERE condition

Типы объединений в SQL

  1. Внутреннее соединение
  2. Оставить Присоединиться
  3. Право Присоединиться
  4. Полное соединение

Ниже мы подробно расскажем о различных типах соединений.

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

При внутреннем объединении мы выбираем только те данные, которые являются общими в обеих таблицах. (т. е. часть 3 здесь) Чтобы сделать это более точным, все записи из обеих таблиц, соответствующие условию, указанному в соединении, выбираются в этом соединении.

Синтаксис внутреннего соединения:

SELECT column-names FROM table-name1 INNER JOIN table-name2 ON column-name1 = column-name2 WHERE condition

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

В левом соединении мы выбираем все данные из левой таблицы, а из правой таблицы выбираем только тот набор данных, который соответствует условию, указанному для объединения (здесь область 1 + 3).

Синтаксис левого соединения:

SELECT column-names FROM table-name1 LEFT JOIN table-name2 ON column-name1 = column-name2 WHERE condition

3. Правильное соединение

В правом соединении мы выбираем все данные из правой таблицы, а из левой таблицы выбираем только тот набор данных, который соответствует условию, указанному для объединения (здесь 3 + 2).

Синтаксис правого соединения:

SELECT column-names FROM table-name1 RIGHT JOIN table-name2 ON column-name1 = column-name2 WHERE condition

4. Полное соединение

При полном объединении все записи из обеих таблиц объединяются и выбираются независимо от того, упомянуто условие с выполнением объединения или нет. (здесь 1 + 2 + 3)

Синтаксис полного соединения:

SELECT column-names FROM table-name1 FULL JOIN table-name2 ON column-name1 = column-name2 WHERE condition

Примеры соединений в SQL

Рассмотрим две таблицы, приведенные ниже:

1. Пример ORDER_DETAILS

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

Таблица ORDER_DETAILS:

Номер заказа No_of_Items Сумма заказа Пользовательский ИД Дата заказа
123 3 5500 P_1 01/20/2019
234 2 6500 P_12 02/10/2019
345 1 10000 P_13 05/27/2019
456 4 4000 P_14 11/07/2019
567 2 20656 P_1 12/15/2019
678 3 15000 P_11 10/27/2019

2. Пример CUSTOMER_DETAILS

Теперь давайте возьмем другую таблицу, в которой будут храниться данные клиента, чтобы иметь возможность доставить заказ по соответствующим адресам. Таким образом, таблица customer будет содержать данные клиента, такие как идентификатор клиента (cust_id), который будет уникальным для каждого клиента. Теперь имя и фамилия хранятся в полях с именами - Cust_First_Name и Cust_Last_Name. В других полях будет храниться такая информация, как идентификатор электронной почты, номер мобильного телефона клиента, а также адрес, пин-код, город и штат. Таким образом, мы видим, что наша таблица Customer будет выглядеть примерно так:

CUSTOMER_DETAILS Таблица:

CUST_ID Cust_First_Name Cust_Last_Name Пин-код Адрес Cust_Mobile город состояние Cust_email
P_50 Алиса Питер 111111 Улица 330 ксыз 123 Бангалор KA
P_12 Джеймс Dsouza 155511 420 ABC колонии 234 Хайдарабад AP
P_15 Гарри гончар 123456 551 мг дорога 444 Нойды Дели
P_40 Майли Parker 111121 11 футов дороги 224 Бангалор KA
P_10 Герман буш 123423 34 thco Street 432 Дели Дели
P_18 Дэн коричневый 134523 50- я независимая дорога 145 Gurugram Харьяны
P_20 Джеймс Russel 111111 101 мг дорога 678 Бангалор KA
P_1 Майли Madison 100011 45- й макет кавераппа +987 Chennai Теннесси

Теперь, используя этот пример, давайте разберемся с функциональностью объединений. Мы можем видеть, что связь между двумя таблицами, т. Е. Таблицей ORDER_DETAILS и таблицей CUSTOMER_DETAILS, устанавливается ключом, который имеет значение идентификатора клиента, т. Е. Customer_Id, который является первичным ключом в таблице CUSTOMER_DETAILS, и внешним ключом в Таблица ORDER_DETAILS.

Несколько важных моментов, на которые следует обратить внимание, прежде чем мы продолжим:

  • Не все клиенты в нашей таблице CUSTOMER_DETAILS разместили запрос заказа.
  • Не весь запрос заказа, который мы имеем в нашей таблице ORDER_DETAILS, имеет идентификатор customer_id, который присутствует в нашей таблице CUSTOMER_DETAILS, что означает, что для некоторых заказов нет сведений о клиенте.

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

Inner Join предоставит вам только те записи, для которых условие выполнено.

Запрос:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
inner join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Выход:

Cust_First_Name Cust_email No_of_Items Сумма заказа Дата заказа
Майли 3 5500 01/20/2019
Джеймс 2 6500 02/10/2019
Майли 2 20656 12/15/2019

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

Left Join выдаст вам все записи из левой таблицы, то есть из таблицы CUSTOMER_DETAILS. Если клиент не разместил ни одного заказа, он вернет нулевое значение для столбцов в таблице ORDER_DETAILS.

Запрос:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
left join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Выход:

Cust_First_Name Cust_email No_of_Items Сумма заказа Дата заказа
Алиса ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Джеймс 2 6500 02/10/2019
Гарри ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Майли ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Герман ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Дэн ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Джеймс ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Майли 3 5500 01/20/2019
Майли 2 20656 12/15/2019

5. Правильное соединение

Да, Join предоставит вам все записи из правой таблицы, то есть таблицы ORDER_DETAILS. Если для заказа не найдено записей о клиентах, он вернет нулевое значение для столбцов в таблице CUSTOMER_DETAILS.

Запрос:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
right join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Выход:

Cust_First_Name Cust_email No_of_Items Сумма заказа Дата заказа
Майли 3 5500 01/20/2019
Джеймс 2 6500 02/10/2019
ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL 1 10000 05/27/2019
ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL 4 4000 11/07/2019
Майли 2 20656 12/15/2019
ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL 3 15000 10/27/2019

6. Полное соединение

Полное соединение даст вам все записи, указанные в обеих таблицах.

Запрос:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
full join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Выход:

Cust_First_Name Cust_email No_of_Items Сумма заказа Дата заказа
Алиса ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Джеймс 2 6500 02/10/2019
Гарри ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Майли ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Герман ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Дэн ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Джеймс ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL
Майли 3 5500 01/20/2019
Майли 2 20656 12/15/2019
ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL 1 10000 05/27/2019
ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL 4 4000 11/07/2019
ЗНАЧЕНИЕ NULL ЗНАЧЕНИЕ NULL 3 15000 10/27/2019

Преимущества объединений в SQL

  1. Более быстрое выполнение, что означает более быстрый поиск нужных столбцов.
  2. Оптимизированный, читаемый и понятный
  3. Увеличение производительности.

Вывод

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

  • Inner Join извлекает записи, в которых выполняется данное условие.
  • Left Join выдаст вам все строки из левой таблицы, даже если данное условие не соответствует.
  • Правое соединение даст вам все строки из левой таблицы, даже если данное условие не соответствует.
  • Full Join возвращает все строки, когда в одной из таблиц есть совпадение.
  • Запросы на присоединение могут использоваться с такими командами, как - SELECT, INSERT, UPDATE, DELETE.
  • Объединения также поддерживают различные пункты, такие как GROUP BY, SUB-запросы, WHERE, AGGREGATE FUNCTIONS и т. Д.

Рекомендуемая статья

Это было руководство по типам соединений в SQL. Здесь мы обсуждаем различные типы объединений в SQL и их преимущества вместе с примерами. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше -

  1. Преимущества NoSQL
  2. Инструменты управления SQL
  3. База данных в SQL
  4. Подстановочный знак в SQL
  5. 6 лучших типов соединений в MySQL с примерами