Въведение във видовете съединения в SQL

Клаузата за присъединяване в SQL служи за целта на комбиниране на редове от две или повече таблици. Процесът на комбиниране на редове зависи от колона, която е свързана с тях. Четирите различни типа присъединения в SQL са наречени вътрешно присъединяване, ляво присъединяване, дясно присъединяване и пълно присъединяване. Преди наистина да започнем да използваме какъвто и да е тип присъединяване, се нуждаем от RDBMS или система за управление на релационни бази данни, където ще заредим данните. Един от много лесните начини за разбиране на присъединенията е чрез използването на диаграмата Venn. Използването на диаграма на Venn улеснява преценката на всички възможни и логични отношения между различните набори от данни. Нека разберем това едно по едно, използвайки диаграмата на Вен. По-късно ще разберем разликата между тях, използвайки някои практически примери. Нека предположим, че в нашата база данни има два набора от данни, съхранявани под формата на таблица първа и таблица втора. Съществува някаква връзка между двете таблици, която е посочена под формата на първичен ключ и понятие с чужд ключ. Ако се присъедините към две таблици, имащи някаква връзка, представянето на диаграма на Venn на сценария ще бъде нещо като,

Количеството на това припокриване ще определи степента на сходство между двете таблици, т.е. таблица А и таблица Б. Това означава, че броят на записите от таблица първа, които съвпадат със записите от таблица втора, е представен от секцията за припокриване. Това е едно подмножество от данни. Получаваме четири различни типа съединения въз основа на подмножеството от данни, които събираме от двете таблици.

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

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)

Синтаксис на Right Join:

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 Таблица:

ORDER_ID No_of_Items ORDER_AMOUNT Клиентски номер Дата на поръчка
123 3 5500 P_1 20.01.2019
234 2 6500 P_12 10.02.2019
345 1 10000 P_13 05/27/2019
456 4 4000 P_14 07/11/2019
567 2 20656 P_1 12.15.2019
678 3 15000 P_11 10.27.2019

2. Пример за CUSTOMER_DETAILS

Сега нека вземем друга таблица, в която ще се съхраняват детайлите на клиента, така че да може да достави поръчката до съответните им адреси. Следователно в таблицата на клиентите ще има данни за клиента, като например идентификационен номер на клиента (cust_id), който ще бъде уникален за всеки клиент. Сега името и фамилията се съхраняват в полето, наречено - Cust_First_Name и Cust_Last_Name. Останалите полета ще съхраняват информацията като имейл идентификатор, мобилен номер на клиента, заедно с адреса, Pincode, града и държавата. По този начин можем да видим, че нашата таблица с клиенти ще изглежда нещо като -

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 mg път 444 Нойда Делхи
P_40 Майли Паркър 111 121 11 фута път 224 Бангалор KA
P_10 Херман храст 123423 Ул. 34 -та от улицата 432 Делхи Делхи
P_18 Дан кафяв 134523 50 -ти независим път 145 Gurugram Харяна
P_20 Джеймс Ръсел 111111 101 mg път 678 Бангалор KA
P_1 Майли Madison 100011 45 -та подредба на kaverappa 987 Ченай TN

Сега използвайки този пример, нека разберем функционалността на съединенията. Можем да видим, че връзката между двете таблици, т.е. таблицата ORDER_DETAILS и таблицата CUSTOMER_DETAILS, се установява чрез ключа, който има стойността на идентификатора на клиента, т.е. ORDER_DETAILS таблица.

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

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

3. Вътрешно присъединяване

Вътрешното присъединяване ще ви даде само онези записи, за които е изпълнено условието.

Запитване:

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 ORDER_AMOUNT Дата на поръчка
Майли 3 5500 20.01.2019
Джеймс 2 6500 10.02.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 ORDER_AMOUNT Дата на поръчка
Алис НУЛА НУЛА НУЛА
Джеймс 2 6500 10.02.2019
грабя НУЛА НУЛА НУЛА
Майли НУЛА НУЛА НУЛА
Херман НУЛА НУЛА НУЛА
Дан НУЛА НУЛА НУЛА
Джеймс НУЛА НУЛА НУЛА
Майли 3 5500 20.01.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 ORDER_AMOUNT Дата на поръчка
Майли 3 5500 20.01.2019
Джеймс 2 6500 10.02.2019
НУЛА НУЛА 1 10000 05/27/2019
НУЛА НУЛА 4 4000 07/11/2019
Майли 2 20656 12.15.2019
НУЛА НУЛА 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 ORDER_AMOUNT Дата на поръчка
Алис НУЛА НУЛА НУЛА
Джеймс 2 6500 10.02.2019
грабя НУЛА НУЛА НУЛА
Майли НУЛА НУЛА НУЛА
Херман НУЛА НУЛА НУЛА
Дан НУЛА НУЛА НУЛА
Джеймс НУЛА НУЛА НУЛА
Майли 3 5500 20.01.2019
Майли 2 20656 12.15.2019
НУЛА НУЛА 1 10000 05/27/2019
НУЛА НУЛА 4 4000 07/11/2019
НУЛА НУЛА 3 15000 10.27.2019

Предимства на Joins в SQL

  1. По-бързо изпълнение, което означава по-бързо извличане на желаните колони.
  2. Оптимизиран, четим и разбираем
  3. Увеличаване на производителността.

заключение

Както видяхме, използваме JOINs, за да добавим и получим полетата от различни таблици.

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

Препоръчителен член

Това е ръководство за Видовете присъединения в SQL. Тук обсъждаме различните видове присъединения в SQL и неговите предимства заедно с примери. Можете да разгледате и другите ни предложени статии, за да научите повече -

  1. Предимства на NoSQL
  2. Инструменти за управление на SQL
  3. База данни в SQL
  4. Подметка в SQL
  5. Топ 6 вида съединения в MySQL с примери