sql >> Database teknologi >  >> RDS >> Mysql

Hvad er forskellen mellem JOIN og CROSS JOIN i SQL?

SQL har følgende typer joins, som alle kommer direkte fra mængdeteori:

  • Indre sammenføjning.
    From A inner join B er ækvivalent med A ∩ B, hvilket giver det sæt af elementer, der er fælles for begge sæt.

  • Venstre ydre samling.
    From A left outer join B er ækvivalent med (A − B) ∪ (A ∩ B). Hvert A vises mindst én gang; hvis der er flere matchende B'er, vil A'et blive gentaget én gang pr. matchende B.

  • Højre ydre samling.
    From A right outer join B er ækvivalent med (A ∩ B) ∪ (B − A). Det er identisk med en venstre join med bordene, der handler med pladser. Hver B vises mindst én gang; hvis der er flere matchende As, vil hver B blive gentaget én gang pr. matchende B.

  • Fuld ydre forbindelse.
    From A full outer join B er ækvivalent med (A − B) ∪ (A ∩ B) ∪ (B − A). Hver A og hver B vises mindst én gang. Hvis et A matcher flere B'er, vil det blive gentaget én gang pr. match; hvis et B matcher flere Som det vil blive gentaget én gang pr. match.

  • Cross Join.
    From A cross join B er producerer det kartesiske produkt A × B. Hver A gentages én gang for hver B. Hvis A har 100 rækker og B har 100 rækker, vil resultatsættet bestå af 10.000 rækker.

Det skal bemærkes, at den teoretiske udførelse af en select forespørgslen består af følgende trin udført i denne rækkefølge:

  1. Beregn det fulde kartesiske produkt af kildesættet(erne) i from klausul for at prime kandidatresultatsættet.

  2. Anvend joinkriterierne i from klausul og reducere kandidatresultatsættet.

  3. Anvend kriterierne i where clause for yderligere at reducere kandidatresultatsættet.

  4. opdele kandidatresultatsættet i grupper baseret på kriterierne i group by klausul.

  5. Fjern fra kandidatresultatsættet andre kolonner end dem, der er involveret i group by klausul eller involveret i evalueringen af ​​en samlet funktion.

  6. Beregn værdien af ​​sådanne samlede funktioner for hver gruppe i kandidatresultatsættet.

  7. Skjul hver gruppe i kandidatresultatsættet i en enkelt række bestående af grupperingskolonnerne og de beregnede værdier for hver aggregeret funktion. Kandidatresultatsættet består nu af én række for hver gruppe, med alle kolonner bortset fra group by kolonner eller beregningsværdierne for aggregerede funktioner for gruppen elimineres.

  8. Anvend kriterierne i having klausul for at reducere kandidatresultatsættet og producere det endelige resultatsæt.

  9. Bestil det endelige resultat efter kriterierne i order by klausul og udsende den.

Der er flere trin, der har at gøre med ting som compute og compute by klausuler, men dette er tilstrækkeligt til at få den teoretiske opfattelse af, hvordan det fungerer.

Det skal også bemærkes, at intet andet end den mest naive implementering faktisk ville evaluere en select erklæring på denne måde, men de producerede resultater skal være de samme, som hvis ovenstående trin blev udført fuldt ud.



  1. arabisk karakter ikke indsat korrekt (som ????) i oracle database?

  2. Opret tabel DDL med Execute Immediate i Oracle Database del 2

  3. Find sidste række i gruppe efter query-SQL Server

  4. Transform datoer til datointerval i MYSQL --- hvordan man håndterer huller i datoerne