SQL heeft de volgende typen joins, die allemaal rechtstreeks uit de verzamelingenleer komen:
-
Innerlijke verbinding.
From A inner join B
is het equivalent van A B, wat de verzameling elementen oplevert die beide verzamelingen gemeen hebben. -
Linker buitenste join.
From A left outer join B
is het equivalent van (A − B) ∪ (A ∩ B). Elke A komt minimaal één keer voor; als er meerdere overeenkomende B's zijn, wordt de A één keer herhaald per overeenkomende B. -
Rechter buitenste join.
From A right outer join B
is het equivalent van (A ∩ B) ∪ (B − A). Het is identiek aan een left join met de tafels die van plaats wisselen. Elke B zal minstens één keer verschijnen; als er meerdere overeenkomende A's zijn, wordt elke B één keer herhaald per overeenkomende B. -
Volledige outer join.
From A full outer join B
is het equivalent van (A − B) ∪ (A ∩ B) ∪ (B − A). Elke A en elke B zal minstens één keer verschijnen. Als een A overeenkomt met meerdere B's, wordt deze één keer per wedstrijd herhaald; als een B overeenkomt met meerdere As, wordt het één keer per wedstrijd herhaald. -
Kruis deelnemen.
From A cross join B
is produceert het cartesiaanse product A × B. Elke A wordt één keer herhaald voor elke B. Als A 100 rijen heeft en B 100 rijen, bestaat de resultatenset uit 10.000 rijen.
Opgemerkt moet worden dat de theoretische uitvoering van een select
query bestaat uit de volgende stappen die in deze volgorde worden uitgevoerd:
-
Bereken het volledige cartesiaanse product van de bronset(s) in de
from
clausule om de kandidaat-resultatenset te primen. -
Pas de deelnamecriteria toe in de
from
clausule en verklein de resultatenset van de kandidaat. -
Pas de criteria toe in de
where clause
om de resultatenset voor kandidaten verder te verkleinen. -
verdeel de kandidaatresultaten in groepen op basis van de criteria in de
group by
clausule. -
Verwijder alle kolommen uit de resultatenreeks van de kandidaat die niet zijn betrokken bij de
group by
clausule of betrokken bij de evaluatie van een geaggregeerde functie. -
Bereken de waarde van dergelijke aggregatiefuncties voor elke groep in de kandidaat-resultatenset.
-
Vouw elke groep in de kandidaat-resultatenset samen in een enkele rij die bestaat uit de groeperingskolommen en de berekende waarden voor elke aggregatiefunctie. De kandidaat-resultatenset bestaat nu uit één rij voor elke groep, met alle kolommen behalve de
group by
kolommen of de rekenwaarden van geaggregeerde functies voor de groep worden geëlimineerd. -
Pas de criteria toe in de
having
clausule om de resultatenset van de kandidaat te verkleinen en de uiteindelijke resultatenset te produceren. -
Bestel het eindresultaat ingesteld volgens de criteria in
order by
clausule en zend het uit.
Er zijn meer stappen, die te maken hebben met zaken als compute
en compute by
clausules, maar dit is voldoende om een theoretisch idee te krijgen van hoe het werkt.
Er moet ook worden opgemerkt dat alleen de meest naïeve implementatie een select
. zou evalueren verklaring op deze manier, maar de geproduceerde resultaten moeten hetzelfde zijn alsof de bovenstaande stappen volledig zijn uitgevoerd.