SQL ma następujące typy złączeń, z których wszystkie pochodzą bezpośrednio z teorii mnogości:
-
Złączenie wewnętrzne.
From A inner join B
jest odpowiednikiem A ∩ B, dostarczając zestaw elementów wspólnych dla obu zbiorów. -
Lewe sprzężenie zewnętrzne.
From A left outer join B
jest odpowiednikiem (A − B) ∪ (A ∩ B). Każde A pojawi się przynajmniej raz; jeśli istnieje wiele pasujących B, A zostanie powtórzone raz na pasujące B. -
Prawe sprzężenie zewnętrzne.
From A right outer join B
jest odpowiednikiem (A ∩ B) ∪ (B − A). Jest to identyczne jak lewe sprzężenie z miejscami wymiany stołów. Każde B pojawi się przynajmniej raz; jeśli istnieje wiele pasujących A, każde B zostanie powtórzone raz na pasujące B. -
Pełne sprzężenie zewnętrzne.
From A full outer join B
jest odpowiednikiem (A − B) ∪ (A ∩ B) ∪ (B − A). Każdy A i każdy B pojawi się przynajmniej raz. Jeśli A pasuje do wielu B, zostanie powtórzone raz na mecz; jeśli B pasuje do wielu As, zostanie powtórzone raz na mecz. -
Połączenie krzyżowe.
From A cross join B
produkuje produkt kartezjański A × B. Każde A zostanie powtórzone raz dla każdego B. Jeśli A ma 100 wierszy, a B ma 100 wierszy, zestaw wyników będzie składał się z 10 000 wierszy.
Należy zauważyć, że teoretyczne wykonanie select
zapytanie składa się z następujących kroków wykonywanych w tej kolejności:
-
Oblicz pełny iloczyn kartezjański zestawów źródłowych w
from
klauzula przygotowująca zbiór wyników kandydata. -
Zastosuj kryteria łączenia w
from
klauzulę i zmniejszyć zestaw wyników kandydata. -
Zastosuj kryteria w klauzuli
where clause
aby jeszcze bardziej zredukować kandydujący zestaw wyników. -
podziel zestaw wyników kandydata na grupy na podstawie kryteriów w
group by
klauzula. -
Usuń z kandydującego zestawu wyników wszelkie kolumny inne niż te, które należą do
group by
klauzuli lub zaangażowane w ocenę funkcji zbiorczej. -
Oblicz wartość dowolnej takiej funkcji agregującej dla każdej grupy w kandydującym zestawie wyników.
-
Zwiń każdą grupę w kandydującym zestawie wyników do pojedynczego wiersza składającego się z kolumn grupujących i wartości obliczonych dla każdej funkcji agregującej. Kandydujący zestaw wyników składa się teraz z jednego wiersza dla każdej grupy, ze wszystkimi kolumnami innymi niż
group by
kolumny lub wartości obliczeniowe funkcji agregujących dla grupy są eliminowane. -
Zastosuj kryteria w
having
klauzula o zmniejszeniu zestawu wyników kandydata i stworzeniu ostatecznego zestawu wyników. -
Uporządkuj wynik końcowy ustawiony według kryteriów w
order by
klauzulę i wyemituj ją.
Jest więcej kroków związanych z takimi rzeczami jak compute
i compute by
klauzul, ale to wystarczy, aby uzyskać teoretyczne pojęcie, jak to działa.
Należy również zauważyć, że tylko najbardziej naiwna implementacja nie oceni select
oświadczenie w ten sposób, ale uzyskane wyniki muszą być takie same, jak gdyby powyższe kroki zostały wykonane w całości.