sql >> Databasteknik >  >> RDS >> Mysql

Vad är skillnaden mellan JOIN och CROSS JOIN i SQL?

SQL har följande typer av joins, som alla kommer direkt från mängdteorin:

  • Inre sammanfogning.
    From A inner join B är ekvivalenten med A ∩ B, vilket ger den uppsättning element som är gemensamma för båda uppsättningarna.

  • Vänster yttre sammanfogning.
    From A left outer join B är ekvivalenten med (A − B) ∪ (A ∩ B). Varje A kommer att visas minst en gång; om det finns flera matchande B, kommer A:et att upprepas en gång per matchande B.

  • Höger yttre sammanfogning.
    From A right outer join B är ekvivalenten med (A ∩ B) ∪ (B − A). Det är identiskt med en vänsterkoppling med bordshandelsplatserna. Varje B kommer att visas minst en gång; om det finns flera matchande As, kommer varje B att upprepas en gång per matchande B.

  • Fullständig yttre sammanfogning.
    From A full outer join B är ekvivalenten med (A − B) ∪ (A ∩ B) ∪ (B − A). Varje A och varje B kommer att visas minst en gång. Om ett A matchar flera B kommer det att upprepas en gång per match; om ett B matchar flera As kommer det att upprepas en gång per match.

  • Cross Join.
    From A cross join B är producerar den kartesiska produkten A × B. Varje A kommer att upprepas en gång för varje B. Om A har 100 rader och B har 100 rader kommer resultatuppsättningen att bestå av 10 000 rader.

Det bör noteras att det teoretiska utförandet av en select fråga består av följande steg utförda i denna ordning:

  1. Beräkna hela kartesiska produkten av källuppsättningen/källuppsättningarna i from klausul för att prima kandidatresultatuppsättningen.

  2. Tillämpa kopplingskriterierna i from klausul och minska kandidatresultatuppsättningen.

  3. Tillämpa kriterierna i where clause för att ytterligare minska kandidatresultatet.

  4. partitionera kandidatresultatuppsättningen i grupper baserat på kriterierna i group by klausul.

  5. Ta bort från kandidatresultatuppsättningen andra kolumner än de som är involverade i group by klausul eller involverad i utvärderingen av en aggregerad funktion.

  6. Beräkna värdet av sådana aggregerade funktioner för varje grupp i kandidatresultatuppsättningen.

  7. Komprimera varje grupp i kandidatresultatuppsättningen till en enda rad som består av grupperingskolumnerna och de beräknade värdena för varje aggregerad funktion. Kandidatresultatuppsättningen består nu av en rad för varje grupp, med alla kolumner utom group by kolumner eller beräkningsvärdena för aggregerade funktioner för gruppen elimineras.

  8. Tillämpa kriterierna i having klausul för att minska kandidatresultatuppsättningen och producera den slutliga resultatuppsättningen.

  9. Beställ det slutliga resultatet enligt kriterierna i order by klausul och avge den.

Det finns fler steg som har att göra med saker som compute och compute by klausuler, men detta är tillräckligt för att få en teoretisk uppfattning om hur det fungerar.

Det bör också noteras att inget annat än den mest naiva implementeringen faktiskt skulle utvärdera en select på detta sätt, men resultatet måste vara detsamma som om ovanstående steg utfördes i sin helhet.



  1. Hur man får SQL Server-statistikinformation med hjälp av systemstatistiska funktioner

  2. Tre timmars tidsintervall i MySQL-fråga

  3. Hur man släpper databas med hjälp av TSQL och GUI - SQL Server / TSQL Tutorial Del 25

  4. Skillnad mellan datetime och timestamp i sqlserver?