Wat is het verschil tussen INNER JOIN
, LEFT JOIN
, RIGHT JOIN
en FULL JOIN
in MySQL?
Het lezen van dit originele artikel op The Code Project zal je veel helpen: Visuele weergave van SQL joins.
Bekijk ook deze post: SQL SERVER - Betere prestaties - LINKS JOIN of NIET IN?.
Vind het origineel op: Verschil tussen JOIN en OUTER JOIN in MySQL.
INNER JOIN krijgt alle records die gemeenschappelijk zijn tussen beide tabellen op basis van de opgegeven ON-clausule.
LEFT JOIN krijgt alle records uit de LINKS gekoppelde tabel, maar als u enkele kolommen uit de RECHTS gekoppelde tabel hebt geselecteerd en er geen gerelateerde records zijn, zullen deze kolommen NULL bevatten.
RIGHT JOIN is als het bovenstaande maar krijgt alle records in de RECHTER tabel.
FULL JOIN haalt alle records uit beide tabellen en zet NULL in de kolommen waar gerelateerde records niet bestaan in de tegenovergestelde tabel.
Een SQL JOIN clausule wordt gebruikt om rijen uit twee of meer tabellen te combineren, gebaseerd op een gemeenschappelijk veld tussen hen.
Er zijn verschillende soorten joins beschikbaar in SQL:
INNER JOIN: retourneert rijen wanneer er een overeenkomst is in beide tabellen.
LEFT JOIN: retourneert alle rijen uit de linker tabel, zelfs als er geen overeenkomsten zijn in de rechter tabel.
*RIGHT JOIN**: geeft alle rijen terug uit de rechter tabel, zelfs als er geen overeenkomsten zijn in de linker tabel.
FULL JOIN: Deze combineert de resultaten van zowel de linker als de rechter outer joins.
De samengevoegde tabel bevat alle records van beide tabellen en vult NULLs in voor ontbrekende matches aan beide zijden.
SELF JOIN: wordt gebruikt om een tabel aan zichzelf te koppelen alsof het twee tabellen zijn, waarbij ten minste één tabel in de SQL-instructie tijdelijk wordt hernoemd.
CARTESIAN JOIN: geeft het cartesisch product van de verzamelingen records van de twee of meer samengevoegde tabellen.
WE kunnen elke eerste vier joins in Details nemen :
We hebben twee tabellen met de volgende waarden.
TabelA
id firstName lastName
.......................................
1 arun prasanth
2 ann antony
3 sruthy abc
6 new abc
TabelB
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
INNER JOIN
Note :het geeft de intersectie van de twee tabellen, d.w.z. de rijen die ze gemeenschappelijk hebben in TabelA en TabelB
Syntax
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
Pas het toe in onze voorbeeld tabel :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.id2;
Het resultaat zal zijn
firstName lastName age Place
..............................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
LEFT JOIN
Note : geeft alle geselecteerde rijen in tabelA, plus alle gemeenschappelijke geselecteerde rijen in tabelB.
Syntax
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
Pas het toe in onze voorbeeld tabel :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id2;
Resultaat
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
RIGHT JOIN
Note : geeft alle geselecteerde rijen in tabelB, plus alle gemeenschappelijke geselecteerde rijen in tabelA.
Syntax
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
Pas het toe in onze voorbeeld tabel :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id2;
Resultaat
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
NULL NULL 24 chennai
FULL JOIN
Note :Het zal alle geselecteerde waarden uit beide tabellen teruggeven.
Syntax
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
Pas het toe in onze voorbeeld tabel :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
FULL JOIN TableB
ON TableA.id = TableB.id2;
Resultaat
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
NULL NULL 24 chennai
Interessant feit
Voor INNER joins maakt de volgorde niet uit
Voor (LEFT, RIGHT of FULL) OUTER joins, maakt de volgorde uit
Het is beter om deze Link te bekijken, deze zal je interessante details geven over de join volgorde