Wat is een SQL JOIN
en wat zijn de verschillende types?
SQL JOIN
?SQL JOIN
is een methode om gegevens uit twee of meer database tabellen op te halen.
SQL JOIN
s ?Er zijn in totaal vijf JOIN
s. Dat zijn :
1. JOIN or INNER JOIN
2. OUTER JOIN
2.1 LEFT OUTER JOIN or LEFT JOIN
2.2 RIGHT OUTER JOIN or RIGHT JOIN
2.3 FULL OUTER JOIN or FULL JOIN
3. NATURAL JOIN
4. CROSS JOIN
5. SELF JOIN
In dit soort JOIN
, krijgen we alle records die aan de voorwaarde voldoen in beide tabellen, en records in beide tabellen die niet overeenkomen worden niet gerapporteerd.
Met andere woorden, INNER JOIN
is gebaseerd op het enkele feit dat: ALLEEN de overeenkomende records in BEIDE tabellen ZOUEN worden vermeld.
Merk op dat een JOIN
zonder andere JOIN
sleutelwoorden (zoals INNER
, OUTER
, LEFT
, enz) een INNER JOIN
is. Met andere woorden, JOIN
is
een syntactische suiker voor INNER JOIN
(zie: https://stackoverflow.com/questions/565620/difference-between-join-and-inner-join).
OUTER JOIN
haalt op
Ofwel, de overeenkomende rijen uit de ene tabel en alle rijen in de andere tabel Ofwel, alle rijen in alle tabellen (het maakt niet uit of er een overeenkomst is of niet).
Er zijn drie soorten Outer Join :
2.1 LEFT OUTER JOIN of LINKS JOIN
Deze join geeft alle rijen van de linker tabel samen met de overeenkomende rijen van de
rechter tabel. Als er geen overeenkomende kolommen in de rechtertabel zijn, retourneert het NULL
waarden.
2.2 RIGHT OUTER JOIN of RIGHT JOIN
Deze JOIN
retourneert alle rijen uit de rechter tabel in combinatie met de overeenkomende rijen uit de
linker tabel. Als er geen overeenkomende kolommen in de linker tabel zijn, retourneert het NULL
waarden.
2.3 FULL OUTER JOIN of FULL JOIN
Deze JOIN
combineert LEFT OUTER JOIN
en RIGHT OUTER JOIN
. Het retourneert rijen uit beide tabellen als aan de voorwaarden is voldaan en retourneert NULL
waarde als er geen overeenkomst is.
Met andere woorden, OUTER JOIN
is gebaseerd op het feit dat: ALLEEN de overeenkomende vermeldingen in EEN VAN de tabellen (RECHTS of LINKS) of BEIDE van de tabellen(VOLLEDIG) ZOUDEN moeten worden vermeld.
Note that `OUTER JOIN` is a loosened form of `INNER JOIN`.
Het is gebaseerd op de twee voorwaarden :
JOIN
wordt gemaakt op alle kolommen met dezelfde naam voor gelijkheid.Dit schijnt meer theoretisch van aard te zijn en als gevolg daarvan (waarschijnlijk) doen de meeste DBMS niet eens de moeite nemen om dit te ondersteunen.
Het is het Cartesisch product van de twee betrokken tabellen. Het resultaat van een CROSS JOIN
zal geen zin hebben
in de meeste situaties. Bovendien zullen we dit helemaal niet nodig hebben (of het minste nodig hebben, om precies te zijn).
Het is geen andere vorm van JOIN
, maar het is een JOIN
(INNER
, OUTER
, enz) van een tabel naar zichzelf.
Afhankelijk van de operator die gebruikt wordt voor een JOIN
clausule, kunnen er twee soorten JOIN
s zijn. Deze zijn
Gelijkwaardige JOIN
Theta JOIN
Voor elk JOIN
type (INNER
, OUTER
, enz), als we ALLEEN de gelijkheidsoperator (=) gebruiken, dan zeggen we dat
de JOIN
een EQUI JOIN
is.
Dit is hetzelfde als EQUI JOIN
maar het staat alle andere operatoren toe zoals >, <, >= enz.
Velen beschouwen zowel
EQUI JOIN
als ThetaJOIN
als vergelijkbaar metINNER
,OUTER
etcJOIN
s. Maar ik geloof sterk dat dit een vergissing is en de ideeën vaag maakt. WantINNER JOIN
,OUTER JOIN
etc zijn allemaal verbonden met de tabellen en hun gegevens terwijlEQUI JOIN
enTHETA JOIN
alleen verbonden zijn met de operatoren die we in de eerste gebruiken.Nogmaals, er zijn velen die
NATURAL JOIN
beschouwen als een soort van "peculiar"EQUI JOIN
. In feite is het waar, vanwege de eerste voorwaarde die ik noemde voorNATURAL JOIN
. Echter, we hoeven dat niet te beperken totNATURAL JOIN
s alleen.INNER JOIN
s,OUTER JOIN
s etc kunnen ook eenEQUI JOIN
zijn.
Definitie:
JOINS zijn een manier om gegevens uit meerdere tabellen tegelijk op te vragen.
Volgens RDBMS zijn er 5 soorten joins:
Equi-Join: Combineert gemeenschappelijke records uit twee tabellen op basis van gelijkheidsvoorwaarde. Technisch gezien wordt Join gemaakt door de equality-operator (=) te gebruiken om de waarden van de Primary Key van een tabel en de Foreign Key-waarden van een andere tabel te vergelijken, vandaar dat de resultatenset gemeenschappelijke (gematchte) records uit beide tabellen bevat. Zie voor de implementatie INNER-JOIN.
Natuurlijke join:** Het is een verbeterde versie van Equi-Join, waarbij SELECT operatie dubbele kolommen weglaat. Voor implementatie zie INNER-JOIN
Non-Equi-Join: Het is het omgekeerde van Equi-join, waarbij de samenvoegvoorwaarde een andere dan de gelijke operator(=) wordt gebruikt, bijv. !=, <=, >=, >, < of BETWEEN enz. Voor de implementatie zie INNER-JOIN.
Self-Join:: Een aangepast gedrag van join waarbij een tabel gecombineerd wordt met zichzelf; Dit is typisch nodig voor query's van zelfverwijzende tabellen (of Unary relatie entiteit). Voor de implementatie zie INNER-JOINs.
Cartesian Product: Het kruist combineert alle records van beide tabellen zonder enige voorwaarde. Technisch gezien geeft het de resultatenset van een query zonder WHERE-Clause.
In SQL zijn er 3 soorten joins en alle RDBMS joins kunnen worden uitgevoerd met deze soorten joins.
**Het voegt (of combineert) overeenkomende rijen uit twee tabellen samen. Het samenvoegen gebeurt op basis van gemeenschappelijke kolommen van tabellen en hun vergelijkende werking. Als de voorwaarde op gelijkheid is gebaseerd dan wordt: EQUI-JOIN uitgevoerd, anders Non-EQUI-Join.
**Het voegt (of combineert) gematchte rijen van twee tabellen samen en niet-gematchte rijen met NULL waarden. De selectie van niet-gematchte rijen kan echter worden aangepast, bijv. door niet-gematchte rijen uit de eerste tabel of de tweede tabel te selecteren op subtypes: LEFT OUTER JOIN en RIGHT OUTER JOIN.
2.1. LINKS BUITENGEWONE JOIN (ook bekend als LINKS JOIN): Retourneert gematchte rijen uit twee tabellen en niet-gematchte uit de LEFT tabel (d.w.z. eerste tabel) alleen.
2.2. Outer JOIN (ook wel RECHTS JOIN genoemd): Retourneert gematchte rijen uit twee tabellen en niet-gematchte rijen uit alleen de RECHTER tabel.
2.3. FULL OUTER JOIN (a.k.a OUTER JOIN): Retourneert gematchte en niet-gematchte rijen uit beide tabellen.
CROSS-JOIN: Deze join voegt niet samen, maar voert een Cartesisch product uit.
Voer hier de beschrijving van de afbeelding in]1 Opmerking: Self-JOIN kan worden bereikt door INNER-JOIN, OUTER-JOIN en CROSS-JOIN op basis van de vereisten, maar de tabel moet joinen met zichzelf.
1.1: INNER-JOIN: Equi-join implementatie
SELECT *
FROM Table1 A
INNER JOIN Table2 B ON A.<Primary-Key> =B.<Foreign-Key>;
1.2: INNER-JOIN: Natuurlijke-JOIN implementatie
Select A.*, B.Col1, B.Col2 --But no B.ForeignKeyColumn in Select
FROM Table1 A
INNER JOIN Table2 B On A.Pk = B.Fk;
1.3: INNER-JOIN met NON-Equi-join implementatie
Select *
FROM Table1 A INNER JOIN Table2 B On A.Pk <= B.Fk;
1.4: INNER-JOIN met SELF-JOIN
Select *
FROM Table1 A1 INNER JOIN Table1 A2 On A1.Pk = A2.Fk;
2.1: OUTER JOIN (full outer join)
Select *
FROM Table1 A FULL OUTER JOIN Table2 B On A.Pk = B.Fk;
2.2: LEFT JOIN
Select *
FROM Table1 A LEFT OUTER JOIN Table2 B On A.Pk = B.Fk;
2.3: RECHTS JOIN
Select *
FROM Table1 A RIGHT OUTER JOIN Table2 B On A.Pk = B.Fk;
3.1: CROSS JOIN
Select *
FROM TableA CROSS JOIN TableB;
3.2: CROSS JOIN-Self JOIN
Select *
FROM Table1 A1 CROSS JOIN Table1 A2;
//OR//
Select *
FROM Table1 A1,Table1 A2;