Inleiding tot typen joins in SQL
Een Join-clausule in SQL dient om rijen uit twee of meer tabellen te combineren. Het combineren van rijen hangt af van een kolom die eraan is gerelateerd. De vier verschillende typen joins in SQL worden genoemd als een inner join, left join, right join en full join. Voordat we echt elk type join kunnen gaan gebruiken, hebben we een RDBMS of een relationeel databasebeheersysteem nodig waar we de gegevens laden. Een van de zeer eenvoudige manieren om de joins te begrijpen, is door het Venn-diagram te gebruiken. Met behulp van een Venn-diagram is het eenvoudig om alle mogelijke en logische relaties tussen verschillende gegevenssets te meten. Laten we dit een voor een begrijpen met behulp van het Venn-diagram. Later zullen we het verschil tussen deze begrijpen aan de hand van enkele praktische voorbeelden. Laten we aannemen dat er twee gegevenssets in onze database zijn opgeslagen in de vorm van tabel één en tabel twee. Er is een relatie tussen de twee tabellen die wordt gespecificeerd in de vorm van een primaire sleutel en een concept van een externe sleutel. Als u zich aansluit bij twee tabellen die een soort relatie hebben, ziet de Venn-diagramweergave van het scenario er ongeveer zo uit,
De hoeveelheid van deze overlapping zal de mate van overeenkomst tussen de twee tabellen bepalen, namelijk tabel A en tabel B. Dit betekent dat het aantal records uit tabel één, dat overeenkomt met de records uit tabel twee, wordt vertegenwoordigd door de overlappende sectie. Dit is een subset van gegevens. We krijgen vier verschillende typen joins op basis van de gegevensset die we uit de twee tabellen kiezen.
Syntaxis van Join:
SELECT column-names FROM table-name1 JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Typen joins in SQL
- Innerlijke join
- Links meedoen
- Rechts meedoen
- Volledige deelname
Hieronder leggen we verschillende soorten Joins uit in Gedetailleerd.
1. Innerlijke verbinding
In een interne join selecteren we alleen de gegevens die in beide tabellen voorkomen. (dwz deel 3 hier) Om het preciezer te maken, worden alle records uit beide tabellen die overeenkomen met de voorwaarde die met de join wordt genoemd, in deze join gepickt.
Syntaxis van Inner Join:
SELECT column-names FROM table-name1 INNER JOIN table-name2 ON column-name1 = column-name2 WHERE condition
2. Linker deelname
In de linker join selecteren we alle gegevens uit de linker tabel en selecteren we uit de rechter tabel alleen de gegevensset die overeenkomt met de voorwaarde vermeld bij de join (hier gebied 1 + 3)
Syntaxis van Left Join:
SELECT column-names FROM table-name1 LEFT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
3. Rechts meedoen
In de juiste join selecteren we alle gegevens uit de rechtertabel en selecteren we uit de linkertabel alleen de gegevensset die overeenkomt met de voorwaarde die wordt vermeld bij de join (hier 3 + 2)
Syntaxis van Right Join:
SELECT column-names FROM table-name1 RIGHT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
4. Volledige deelname
Bij volledige join worden alle records uit beide tabellen samengevoegd en geselecteerd, ongeacht de voorwaarde dat de join al dan niet heeft voldaan. (hier 1 + 2 + 3)
Syntaxis van volledige deelname:
SELECT column-names FROM table-name1 FULL JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Voorbeelden van Joins in SQL
Overweeg de twee onderstaande tabel:
1. Voorbeeld van een ORDER_DETAILS
De tabelbestelling bevat het detail van de bestelling die door de klant is geplaatst, zoals de bestel-ID, het aantal bestelde producten, het bedrag van de bestelling, de ID van de klant die de bestelling heeft geplaatst en de datum waarop de bestelling is geplaatst. Een dergelijke tabel kan door elke online website worden gebruikt voor het opslaan van de details van de bestelling.
ORDER_DETAILS Tabel:
Order ID | No_of_Items | ORDER_AMOUNT | Klanten ID | Besteldatum |
123 | 3 | 5500 | P_1 | 2019/01/20 |
234 | 2 | 6500 | P_12 | 2019/02/10 |
345 | 1 | 10000 | P_13 | 2019/05/27 |
456 | 4 | 4000 | P_14 | 2019/11/07 |
567 | 2 | 20656 | P_1 | 2019/12/15 |
678 | 3 | 15000 | P_11 | 2019/10/27 |
2. Voorbeeld van CUSTOMER_DETAILS
Laten we nu een andere tabel nemen waarin de gegevens van de klant worden opgeslagen om de bestelling op hun respectieve adressen te kunnen bezorgen. De klantentabel bevat daarom de details van de klant, zoals klant-ID (cust_id), die uniek zal zijn voor elke klant. Nu worden de voornaam en de achternaam opgeslagen in het veld genaamd - Cust_First_Name en Cust_Last_Name. De andere velden slaan de informatie op, zoals het e-mailadres, het mobiele nummer van de klant, samen met het adres, de pincode, de stad en de staat. We kunnen dus zien dat onze klantentabel er ongeveer zo zal uitzien -
CUSTOMER_DETAILS Tabel:
cust_id | Cust_First_Name | Cust_Last_Name | Pincode | Adres | Cust_Mobile | stad | Staat | Cust_email |
P_50 | Alice | Peter | 111111 | 330 xyz-straat | 123 | Bangalore | KA | |
P_12 | James | Dsouza | 155.511 | 420 abc kolonie | 234 | Hyderabad | AP | |
P_15 | Harry | Pottenbakker | 123456 | 551 mg weg | 444 | Noida | Delhi | |
P_40 | Miley | Parker | 111.121 | 11 voet weg | 224 | Bangalore | KA | |
P_10 | Herman | Struik | 123.423 | 34 ste straat | 432 | Delhi | Delhi | |
P_18 | Dan | Bruin | 134.523 | 50 ste onafhankelijke weg | 145 | Gurugram | Haryana | |
P_20 | James | Russel | 111111 | 101 mg weg | 678 | Bangalore | KA | |
P_1 | Miley | Madison | 100011 | 45 e kaverappa-indeling | 987 | Chennai | TN |
Laten we nu dit voorbeeld gebruiken om de functionaliteit van de joins te begrijpen. We kunnen zien dat de relatie tussen de twee tabellen, dat wil zeggen, de tabel ORDER_DETAILS en de tabel CUSTOMER_DETAILS wordt vastgesteld door de sleutel die de waarde heeft van de klant-ID, dwz Klant_Id, die een primaire sleutel is in de tabel CUSTOMER_DETAILS en een externe sleutel in de ORDER_DETAILS-tabel.
Enkele belangrijke punten om op te merken voordat we verder gaan zijn:
- Niet alle klanten in onze CUSTOMER_DETAILS-tabel hebben een bestelaanvraag geplaatst.
- Niet alle bestelaanvragen die we in onze ORDER_DETAILS-tabel hebben, hebben een customer_id die aanwezig is in onze CUSTOMER_DETAILS-tabel, wat betekent dat voor sommige bestellingen er geen detail is van de klant.
3. Innerlijke verbinding
Inner Join geeft je alleen die records waarvoor aan de voorwaarde is voldaan.
Query:
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
Output:
Cust_First_Name | Cust_email | No_of_Items | ORDER_AMOUNT | Besteldatum |
Miley | 3 | 5500 | 2019/01/20 | |
James | 2 | 6500 | 2019/02/10 | |
Miley | 2 | 20656 | 2019/12/15 |
4. Linker deelname
Left Join geeft je alle records uit de linkertabel, dwz de tabel CUSTOMER_DETAILS. Als er geen bestellingen zijn geplaatst door de klant, retourneert deze een nulwaarde voor de kolommen in de tabel ORDER_DETAILS.
Query:
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
Output:
Cust_First_Name | Cust_email | No_of_Items | ORDER_AMOUNT | Besteldatum |
Alice | NUL | NUL | NUL | |
James | 2 | 6500 | 2019/02/10 | |
Harry | NUL | NUL | NUL | |
Miley | NUL | NUL | NUL | |
Herman | NUL | NUL | NUL | |
Dan | NUL | NUL | NUL | |
James | NUL | NUL | NUL | |
Miley | 3 | 5500 | 2019/01/20 | |
Miley | 2 | 20656 | 2019/12/15 |
5. Rechts meedoen
Juist, Join geeft je alle records uit de juiste tabel, dwz de tabel ORDER_DETAILS. Als er geen klantrecords zijn gevonden voor de bestelling, retourneert deze een nulwaarde voor de kolommen in de tabel CUSTOMER_DETAILS.
Query:
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
Output:
Cust_First_Name | Cust_email | No_of_Items | ORDER_AMOUNT | Besteldatum |
Miley | 3 | 5500 | 2019/01/20 | |
James | 2 | 6500 | 2019/02/10 | |
NUL | NUL | 1 | 10000 | 2019/05/27 |
NUL | NUL | 4 | 4000 | 2019/11/07 |
Miley | 2 | 20656 | 2019/12/15 | |
NUL | NUL | 3 | 15000 | 2019/10/27 |
6. Volledige deelname
Full Join geeft je alle records die in beide tabellen zijn opgegeven.
Query:
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
Output:
Cust_First_Name | Cust_email | No_of_Items | ORDER_AMOUNT | Besteldatum |
Alice | NUL | NUL | NUL | |
James | 2 | 6500 | 2019/02/10 | |
Harry | NUL | NUL | NUL | |
Miley | NUL | NUL | NUL | |
Herman | NUL | NUL | NUL | |
Dan | NUL | NUL | NUL | |
James | NUL | NUL | NUL | |
Miley | 3 | 5500 | 2019/01/20 | |
Miley | 2 | 20656 | 2019/12/15 | |
NUL | NUL | 1 | 10000 | 2019/05/27 |
NUL | NUL | 4 | 4000 | 2019/11/07 |
NUL | NUL | 3 | 15000 | 2019/10/27 |
Voordelen van Joins in SQL
- Snellere uitvoering wat sneller ophalen van gewenste kolommen betekent.
- Geoptimaliseerd, leesbaar en begrijpelijk
- Verbetering van de prestaties.
Conclusie
Zoals te zien, gebruiken we JOINs om de velden uit verschillende tabellen toe te voegen en op te halen.
- Inner Join haalt records op waar aan de gegeven voorwaarde is voldaan.
- Left Join geeft je alle rijen uit de linkertabel, zelfs als de gegeven voorwaarde niet overeenkomt.
- Right Join geeft je alle rijen uit de linkertabel, zelfs als de gegeven voorwaarde niet overeenkomt.
- Volledige deelname retourneert alle rijen als er een overeenkomst is in een van de tabellen.
- Join-zoekopdrachten kunnen worden gebruikt met opdrachten zoals - SELECT, INSERT, UPDATE, DELETE.
- Joins kunnen ook opschieten met verschillende clausules zoals - GROUP BY, SUB QUERIES, WHERE, AGGREGATE FUNCTIONS, etc.
Aanbevolen artikel
Dit is een leidraad geweest voor Typen Joins in SQL. Hier bespreken we de verschillende soorten Joins in SQL en de voordelen ervan, samen met voorbeelden. U kunt ook onze andere voorgestelde artikelen doornemen voor meer informatie -
- Voordelen van NoSQL
- SQL Management Tools
- Database in SQL
- Jokerteken in SQL
- Top 6 soorten joins in MySQL met voorbeelden