SQL има следните типове съединения, всички от които идват направо от теорията на множествата:
-
Вътрешно присъединяване.
From A inner join B
е еквивалентът на A ∩ B, осигурявайки набор от елементи, общи за двата набора. -
Ляво външно съединение.
From A left outer join B
е еквивалент на (A − B) ∪ (A ∩ B). Всеки A ще се появи поне веднъж; ако има няколко съответстващи B, A ще се повтори веднъж за всяко съответстващо B. -
Дясно външно съединение.
From A right outer join B
е еквивалент на (A ∩ B) ∪ (B − A). Идентичен е на ляво съединение с размяна на местата на таблиците. Всеки B ще се появи поне веднъж; ако има няколко съвпадащи As, всяко B ще се повтори веднъж за всяко съвпадащо B. -
Пълно външно свързване.
From A full outer join B
е еквивалент на (A − B) ∪ (A ∩ B) ∪ (B − A). Всяко A и всяко B ще се появи поне веднъж. Ако A съвпада с няколко B, то ще се повтаря веднъж на съвпадение; ако B съвпада с няколко As, ще се повтаря веднъж на съвпадение. -
Кръстосано свързване.
From A cross join B
произвежда декартово произведение A × B. Всяко A ще се повтори веднъж за всяко B. Ако A има 100 реда и B има 100 реда, наборът от резултати ще се състои от 10 000 реда.
Трябва да се отбележи, че теоретичното изпълнение на select
заявката се състои от следните стъпки, изпълнявани в този ред:
-
Изчислете пълния декартов продукт на изходния набор(а) в
from
клауза за първичен набор от резултати кандидат. -
Приложете критериите за присъединяване в
from
клауза и намалете набора от резултати кандидат. -
Приложете критериите в
where clause
за допълнително намаляване на набора от резултати на кандидатите. -
разделяне на набора от резултати кандидат на групи въз основа на критериите в
group by
клауза. -
Премахнете от набора с резултати кандидат всички колони, различни от тези, които участват в
group by
клауза или включени в оценката на агрегатна функция. -
Изчислете стойността на всяка такава агрегатна функция за всяка група в набора от резултати кандидат.
-
Свийте всяка група в набора от резултати кандидат в един ред, състоящ се от колоните за групиране и изчислените стойности за всяка агрегатна функция. Кандидатският набор от резултати вече се състои от един ред за всяка група, с всички колони, различни от
group by
колоните или изчислителните стойности на агрегатните функции за групата се елиминират. -
Приложете критериите в
having
клауза за намаляване на набора от резултати кандидат и създаване на набор от крайни резултати. -
Подредете крайния набор от резултати по критериите в
order by
клауза и я излъчете.
Има още стъпки, свързани с неща като compute
и compute by
клаузи, но това е достатъчно, за да получите теоретичната представа за това как работи.
Трябва също да се отбележи, че нищо освен най-наивното внедряване всъщност не би оценило select
израз по този начин, но получените резултати трябва да са същите, както ако горните стъпки бяха изпълнени изцяло.