Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

No SQL, qual é a diferença entre JOIN e CROSS JOIN?


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:

  1. Calcule o produto cartesiano completo do(s) conjunto(s) de origem no from cláusula para preparar o conjunto de resultados candidato.

  2. Aplique os critérios de junção no from cláusula e reduza o conjunto de resultados candidato.

  3. Aplique os critérios na where clause para reduzir ainda mais o conjunto de resultados do candidato.

  4. particionar o conjunto de resultados candidato em grupos com base nos critérios no group by cláusula.

  5. Remova do conjunto de resultados do candidato quaisquer colunas que não estejam envolvidas no group by cláusula ou envolvidos na avaliação de uma função agregada.

  6. Calcule o valor de qualquer dessas funções agregadas para cada grupo no conjunto de resultados candidato.

  7. 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, exceto group by colunas ou os valores computados das funções agregadas para o grupo são eliminados.

  8. Aplique os critérios no having cláusula para reduzir o conjunto de resultados candidato e produzir o conjunto de resultados final.

  9. Ordene o resultado final definido pelos critérios em order 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.