SQL har följande typer av joins, som alla kommer direkt från mängdteorin:
-
Inre sammanfogning.
From A inner join B
är ekvivalenten med A ∩ B, vilket ger den uppsättning element som är gemensamma för båda uppsättningarna. -
Vänster yttre sammanfogning.
From A left outer join B
är ekvivalenten med (A − B) ∪ (A ∩ B). Varje A kommer att visas minst en gång; om det finns flera matchande B, kommer A:et att upprepas en gång per matchande B. -
Höger yttre sammanfogning.
From A right outer join B
är ekvivalenten med (A ∩ B) ∪ (B − A). Det är identiskt med en vänsterkoppling med bordshandelsplatserna. Varje B kommer att visas minst en gång; om det finns flera matchande As, kommer varje B att upprepas en gång per matchande B. -
Fullständig yttre sammanfogning.
From A full outer join B
är ekvivalenten med (A − B) ∪ (A ∩ B) ∪ (B − A). Varje A och varje B kommer att visas minst en gång. Om ett A matchar flera B kommer det att upprepas en gång per match; om ett B matchar flera As kommer det att upprepas en gång per match. -
Cross Join.
From A cross join B
är producerar den kartesiska produkten A × B. Varje A kommer att upprepas en gång för varje B. Om A har 100 rader och B har 100 rader kommer resultatuppsättningen att bestå av 10 000 rader.
Det bör noteras att det teoretiska utförandet av en select
fråga består av följande steg utförda i denna ordning:
-
Beräkna hela kartesiska produkten av källuppsättningen/källuppsättningarna i
from
klausul för att prima kandidatresultatuppsättningen. -
Tillämpa kopplingskriterierna i
from
klausul och minska kandidatresultatuppsättningen. -
Tillämpa kriterierna i
where clause
för att ytterligare minska kandidatresultatet. -
partitionera kandidatresultatuppsättningen i grupper baserat på kriterierna i
group by
klausul. -
Ta bort från kandidatresultatuppsättningen andra kolumner än de som är involverade i
group by
klausul eller involverad i utvärderingen av en aggregerad funktion. -
Beräkna värdet av sådana aggregerade funktioner för varje grupp i kandidatresultatuppsättningen.
-
Komprimera varje grupp i kandidatresultatuppsättningen till en enda rad som består av grupperingskolumnerna och de beräknade värdena för varje aggregerad funktion. Kandidatresultatuppsättningen består nu av en rad för varje grupp, med alla kolumner utom
group by
kolumner eller beräkningsvärdena för aggregerade funktioner för gruppen elimineras. -
Tillämpa kriterierna i
having
klausul för att minska kandidatresultatuppsättningen och producera den slutliga resultatuppsättningen. -
Beställ det slutliga resultatet enligt kriterierna i
order by
klausul och avge den.
Det finns fler steg som har att göra med saker som compute
och compute by
klausuler, men detta är tillräckligt för att få en teoretisk uppfattning om hur det fungerar.
Det bör också noteras att inget annat än den mest naiva implementeringen faktiskt skulle utvärdera en select
på detta sätt, men resultatet måste vara detsamma som om ovanstående steg utfördes i sin helhet.