SQL má následující typy spojení, z nichž všechny pocházejí přímo z teorie množin:
-
Vnitřní spojení.
From A inner join B
je ekvivalentem A ∩ B, poskytuje množinu prvků společných oběma množinám. -
Levý vnější spoj.
From A left outer join B
je ekvivalent (A − B) ∪ (A ∩ B). Každé A se objeví alespoň jednou; pokud existuje více odpovídajících B, bude se A opakovat jednou pro odpovídající B. -
Pravý vnější spoj.
From A right outer join B
je ekvivalentem (A ∩ B) ∪ (B − A). Je identický s levým spojením s obchodními místy stolů. Každé B se objeví alespoň jednou; pokud existuje více odpovídajících As, každé B se bude opakovat jednou pro odpovídající B. -
Úplné vnější spojení.
From A full outer join B
je ekvivalentem (A − B) ∪ (A ∩ B) ∪ (B − A). Každé A a každé B se objeví alespoň jednou. Pokud se A shoduje s více B, bude se opakovat jednou za shodu; pokud B odpovídá více As, bude se opakovat jednou za shodu. -
Křížové připojení.
From A cross join B
vytváří karteziánský součin A × B. Každé A se bude opakovat jednou pro každé B. Pokud A má 100 řádků a B má 100 řádků, bude sada výsledků obsahovat 10 000 řádků.
Je třeba poznamenat, že teoretické provedení select
dotaz se skládá z následujících kroků provedených v tomto pořadí:
-
Vypočítejte úplný kartézský součin zdrojové sady (sad) v
from
klauzule, která připraví sadu výsledků kandidáta. -
Použijte kritéria spojení v
from
klauzule a redukovat kandidátní sadu výsledků. -
Použijte kritéria v
where clause
k dalšímu snížení sady výsledků kandidátů. -
rozdělte kandidátní sadu výsledků do skupin na základě kritérií v
group by
doložka. -
Odstraňte ze sady výsledků kandidátů všechny sloupce kromě těch, které jsou součástí
group by
klauzule nebo se účastní hodnocení agregační funkce. -
Vypočítejte hodnotu všech takových agregačních funkcí pro každou skupinu v sadě výsledků kandidátů.
-
Sbalte každou skupinu v kandidátské sadě výsledků do jednoho řádku sestávajícího ze sloupců seskupení a vypočtených hodnot pro každou agregační funkci. Kandidátní sada výsledků se nyní skládá z jednoho řádku pro každou skupinu se všemi sloupci kromě
group by
sloupce nebo výpočetní hodnoty agregačních funkcí pro skupinu jsou odstraněny. -
Použijte kritéria v
having
klauzule ke zmenšení sady výsledků kandidátů a vytvoření konečné sady výsledků. -
Seřaďte konečný výsledek nastavený podle kritérií v
order by
klauzule a vydat ji.
Existuje více kroků, které souvisí s věcmi jako compute
a compute by
klauzule, ale to je dostatečné k získání teoretické představy o tom, jak to funguje.
Je třeba také poznamenat, že nic jiného než ta nejnaivnější implementace by ve skutečnosti nevyhodnotila select
tímto způsobem, ale získané výsledky musí být stejné, jako kdyby byly výše uvedené kroky provedeny v plném rozsahu.