Въведение във видовете съединения в 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. Вътрешно присъединяване
При вътрешно присъединяване ние избираме само данните, които са общи и в двете таблици. (т.е. част 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
- По-бързо изпълнение, което означава по-бързо извличане на желаните колони.
- Оптимизиран, четим и разбираем
- Увеличаване на производителността.
заключение
Както видяхме, използваме JOINs, за да добавим и получим полетата от различни таблици.
- Inner Join извлича записи, в които е изпълнено даденото условие.
- Left Join ще ви даде всички редове от лявата таблица, дори когато даденото условие не съвпада.
- Right Join ще ви даде всички редове от лявата таблица, дори когато даденото условие не съвпада.
- Full Join връща всички редове, когато има съвпадение в една от таблиците.
- Заявките за присъединяване могат да се използват с команди като - SELECT, INSERT, UPDATE, DELETE.
- Присъединяването също се съчетава с различни клаузи като - GROUP BY, SUB QUERIES, WHERE, AGGREGATE FUNCTIONS и т.н.
Препоръчителен член
Това е ръководство за Видовете присъединения в SQL. Тук обсъждаме различните видове присъединения в SQL и неговите предимства заедно с примери. Можете да разгледате и другите ни предложени статии, за да научите повече -
- Предимства на NoSQL
- Инструменти за управление на SQL
- База данни в SQL
- Подметка в SQL
- Топ 6 вида съединения в MySQL с примери