JOIN är en operatör för SQL- språket , som är en implementering av den relationella algebra- join-operationen . Ingår i FROM-satsen i SELECT- , UPDATE- och DELETE- satserna .
Join-operationen, liksom andra binära operationer , är utformad för att hämta data från två tabeller och inkludera dessa data i en resultatuppsättning. De utmärkande egenskaperna för sammanfogningsoperationen är följande:
Bestämningen av vilka källsträngar som kommer att inkluderas i resultatet och i vilka kombinationer beror på typen av joinoperation och på det explicit specificerade joinvillkoret . Sammanfogningsvillkoret, det vill säga villkoret för att matcha rader med källtabeller med varandra, är ett logiskt uttryck ( predikat ).
Om det är nödvändigt att sammanfoga inte två, utan flera tabeller, tillämpas joinoperationen flera gånger (successivt).
SQL JOIN-operationen är en implementering av den relationella algebra-join-operationen endast i viss utsträckning, eftersom i relationsdatamodellen en join utförs på relationer, som är uppsättningar , och i SQL, på tabeller, som är multiset . Resultaten av operationer är också generellt sett olika: i relationalgebra ger resultatet av en join en relation (uppsättning) och i SQL en tabell (multiset).
I de flesta DBMS, när du anger orden LEFT, RIGHT, FULLkan ordet OUTERutelämnas. Ordet INNERkan också utelämnas i de flesta DBMS.
I det allmänna fallet kontrollerar DBMS villkoret ( predikat ) när en anslutning upprättas . Om namnen på kolumnerna som tabellerna sammanfogas med är desamma kan du istället använda . Villkoret är inte specificerat för. ONUSINGCROSS JOIN
För korskoppling (kartesisk produkt) CROSS JOINanvänder vissa SQL-implementationer kommaoperatorn ( , ):
FRÅN Tabell1 , Tabell2Följande tabeller kommer att användas för ytterligare förklaringar:
ID | namn |
---|---|
ett | Moskva |
2 | St. Petersburg |
3 | Kazan |
namn | Stads-ID |
---|---|
Andrew | ett |
Leonid | 2 |
Sergey | ett |
Gregory | fyra |
Den inre sammanfogningsoperatören INNER JOIN sammanfogar två bord. Ordningen på tabellerna för operatorn är oviktig eftersom operatorn är kommutativ .
Rubriken i resultattabellen är föreningen ( sammanlänkning ) av rubrikerna för de sammanfogade tabellerna.
Resultatets kropp är logiskt utformad enligt följande. Varje rad i en tabell jämförs med varje rad i den andra tabellen, varefter sammanfogningsvillkoret kontrolleras för den resulterande "sammanfogade" raden (sammanfogningspredikatet beräknas). Om villkoret är sant läggs motsvarande "sammanfogade" rad till i resultattabellen.
Den beskrivna algoritmen för åtgärder är strikt logisk, det vill säga den förklarar bara resultatet som ska erhållas när man utför operationen, men föreskriver inte att en viss DBMS utför anslutningen på det angivna sättet. Det finns flera sätt att implementera joinoperationen, till exempel kapslade loopar join ( eng. inner loops join ), hash join ( eng. hash join ), merge join ( eng. merge join ). Det enda kravet är att varje implementering logiskt ska ge samma resultat som när den beskrivna algoritmen tillämpas.
VÄLJ * FRÅN Person INNER JOIN City ON Person . CityId = stad . IDResultat:
Person.namn | Person.CityId | City.Id | Stadens namn |
---|---|---|---|
Andrew | ett | ett | Moskva |
Leonid | 2 | 2 | St. Petersburg |
Sergey | ett | ett | Moskva |
En koppling mellan två tabeller som nödvändigtvis inkluderar alla rader i antingen en eller båda tabellerna.
VÄNSTER YTTRE JOINDen vänstra yttre sammanfogningsoperatören LEFT OUTER JOIN förenar två bord. Tabellordningen för en operator är viktig eftersom operatorn inte är kommutativ .
Rubriken i resultattabellen är föreningen ( sammanlänkning ) av rubrikerna för de sammanfogade tabellerna.
Resultatets kropp är logiskt utformad enligt följande. Låt vänster och höger tabell förenas av predikatet (villkor) p .
Resultat:
Person.namn | Person.CityId | City.Id | Stadens namn |
---|---|---|---|
Andrew | ett | ett | Moskva |
Leonid | 2 | 2 | St. Petersburg |
Sergey | ett | ett | Moskva |
Gregory | fyra | NULL | NULL |
Den högra yttre sammanfogningsoperatören RIGHT OUTER JOIN förenar två bord. Tabellordningen för en operator är viktig eftersom operatorn inte är kommutativ .
Rubriken i resultattabellen är föreningen ( sammanlänkning ) av rubrikerna för de sammanfogade tabellerna.
Resultatets kropp är logiskt utformad enligt följande. Låt vänster och höger tabell förenas av predikatet (villkor) p .
Resultat:
Person.namn | Person.CityId | City.Id | Stadens namn |
---|---|---|---|
Andrew | ett | ett | Moskva |
Sergey | ett | ett | Moskva |
Leonid | 2 | 2 | St. Petersburg |
NULL | NULL | 3 | Kazan |
Den fullständiga yttre sammanfogningsoperatören FULL OUTER JOIN förenar två bord. Ordningen på tabellerna för operatorn är oviktig eftersom operatorn är kommutativ .
Rubriken i resultattabellen är föreningen ( sammanlänkning ) av rubrikerna för de sammanfogade tabellerna.
Resultatets kropp är logiskt utformad enligt följande. Låt den första och andra tabellen sammanfogas av predikatet (villkor) p . Orden "första" och "andra" här anger inte i vilken ordning uttrycket är skrivet (vilket är oviktigt), utan används endast för att skilja mellan tabeller.
Resultat:
Person.namn | Person.CityId | City.Id | Stadens namn |
---|---|---|---|
Andrew | ett | ett | Moskva |
Sergey | ett | ett | Moskva |
Leonid | 2 | 2 | St. Petersburg |
NULL | NULL | 3 | Kazan |
Gregory | fyra | NULL | NULL |
Korskopplingsoperatören , eller kartesisk produkt, sammanfogar två tabeller. Ordningen på tabellerna för operatorn är oviktig eftersom operatorn är kommutativ . CROSS JOIN
Rubriken i resultattabellen är föreningen ( sammanlänkning ) av rubrikerna för de sammanfogade tabellerna.
Resultatets kropp är logiskt utformad enligt följande. Varje rad i en tabell är kopplad till varje rad i den andra tabellen, vilket ger som ett resultat alla möjliga kombinationer av rader av två tabeller.
VÄLJ * FRÅN Person CROSS JOIN Cityeller
VÄLJ * FRÅN Person , StadResultat:
Person.namn | Person.CityId | City.Id | Stadens namn |
---|---|---|---|
Andrew | ett | ett | Moskva |
Andrew | ett | 2 | St. Petersburg |
Andrew | ett | 3 | Kazan |
Leonid | 2 | ett | Moskva |
Leonid | 2 | 2 | St. Petersburg |
Leonid | 2 | 3 | Kazan |
Sergey | ett | ett | Moskva |
Sergey | ett | 2 | St. Petersburg |
Sergey | ett | 3 | Kazan |
Gregory | fyra | ett | Moskva |
Gregory | fyra | 2 | St. Petersburg |
Gregory | fyra | 3 | Kazan |
Om du lägger till ett joinvillkor (predikat p ) i WHERE-satsen , det vill säga restriktioner för kombinationer av tupler, så motsvarar resultatet en operation med samma villkor: INNER JOIN
VÄLJ * FRÅN Person , Stad VAR Person . CityId = stad . IDSålunda är uttrycken t1, t2 WHERE poch t1 INNER JOIN t2 ON psyntaktiskt alternativa former för att skriva samma logiska inre joinoperation på predikatet p . Syntaxen CROSS JOIN + WHEREför joinoperationen sägs vara utfasad och utfasad av SQL ANSI [1] [2] -standarden .
SQL | |
---|---|
versioner |
|
Nyckelord |
|
Relaterade artiklar | |
Delar av ISO/IEC SQL |
|
Databas | |
---|---|
Begrepp |
|
Objekt |
|
Nycklar | |
SQL |
|
Komponenter |