O SQL tem os seguintes tipos de junções, todos vindos diretamente da teoria dos conjuntos:
-
Junta interna.From A inner join B
é o equivalente de A ∩ B, fornecendo o conjunto de elementos comuns a ambos os conjuntos.
-
Junta externa esquerda.From A left outer join B
é o equivalente de (A − B) ∪ (A ∩ B). Cada A aparecerá pelo menos uma vez; se houver vários Bs correspondentes, o A será repetido uma vez por B correspondente.
-
Junto externo direito.From A right outer join B
é o equivalente a (A ∩ B) ∪ (B − A). É idêntico a uma junção esquerda com as mesas de troca de lugares. Cada B aparecerá pelo menos uma vez; se houver vários As correspondentes, cada B será repetido uma vez por B correspondente.
-
União externa completa.From A full outer join B
é o equivalente a (A − B) ∪ (A ∩ B) ∪ (B − A). Cada A e cada B aparecerão pelo menos uma vez. Se um A corresponder a vários Bs, será repetido uma vez por partida; se um B corresponder a vários Como será repetido uma vez por partida.
-
Cross Join.From A cross join B
é produz o produto cartesiano A × B. Cada A será repetido uma vez para cada B. Se A tiver 100 linhas e B tiver 100 linhas, o conjunto de resultados consistirá em 10.000 linhas.
Deve-se notar que a execução teórica de um
select
query consiste nas seguintes etapas executadas nesta ordem:-
Calcule o produto cartesiano completo do(s) conjunto(s) de origem nofrom
cláusula para preparar o conjunto de resultados candidato.
-
Aplique os critérios de junção nofrom
cláusula e reduza o conjunto de resultados candidato.
-
Aplique os critérios nawhere clause
para reduzir ainda mais o conjunto de resultados do candidato.
-
particionar o conjunto de resultados candidato em grupos com base nos critérios nogroup by
cláusula.
-
Remova do conjunto de resultados do candidato quaisquer colunas que não estejam envolvidas nogroup by
cláusula ou envolvidos na avaliação de uma função agregada.
-
Calcule o valor de qualquer dessas funções agregadas para cada grupo no conjunto de resultados candidato.
-
Recolha cada grupo no conjunto de resultados candidato em uma única linha que consiste nas colunas de agrupamento e nos valores calculados para cada função agregada. O conjunto de resultados candidato agora consiste em uma linha para cada grupo, com todas as colunas, excetogroup by
colunas ou os valores computados das funções agregadas para o grupo são eliminados.
-
Aplique os critérios nohaving
cláusula para reduzir o conjunto de resultados candidato e produzir o conjunto de resultados final.
-
Ordene o resultado final definido pelos critérios emorder by
cláusula e emiti-la.
Há mais etapas, relacionadas a coisas como
compute
e compute by
cláusulas, mas isso é suficiente para se ter a noção teórica de como funciona. Deve-se notar também que nada, exceto a implementação mais ingênua, realmente avaliaria um
select
declaração desta forma, mas os resultados produzidos devem ser os mesmos como se as etapas acima fossem executadas na íntegra.