SQL Join-Arten

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

SQL Join-Arten
Hallo

Ich habe ne Frage zu den SQL Joins. Wann erkennt man dass man ein Right Join und ein Left Join verwendet? Ist das egal oder gibt’s da ne Reihenfolge, die man ein halten muss?

z.b.

Film(FilmID , Name , Genre)
Schauspieler(SchauspielerId , Name )
spielt_in( SchauspielerId[Schauspieler] , FilmID[Film] , Rolle )


R Left/Right (Outer) Join S

Left Join brauchst du, wenn du Alle Tupel aus R auswählen willst, ersteinmal unabhängig von der Joinbedingung. Alle Tupel Aus R werden Ausgewählt. Dort wo die Join-bedingung erfüllt ist, werden für die Attribute aus S die entsprechenden Werte eingetragen. Ist die Join-Bedingung nicht erfüllt stehen dort Null-Werte.

Beim Right Join Ist es genau umgekehrt. Es werden also alle Tupel aus S ausgewählt und es stehen evtl. Null-Werte in den Attributen aus R. (R Left Join S) entspricht (S Right Join R)

Abgesehen davon gibt es noch den Full (Outer) Join. Dieser ist Left und Right Join in einem. Es kommen also alle Tupel aus R und S vor und bei beiden stehen Null-Werte, wenn eine Join-Bedingung nicht erfüllt ist.

Neben den Outer Joins gibt es noch den (Inner) Join. Bei diesem tauchen nur die Werte in der Ergebnisstabelle auf, für die die Join-Bedingung erfüllt ist.


Aber wie sieht es dann in den Praxis bei den Anfragen aus ist das egal ob man ein Right Join oder Left join nimmt auf die bezügliche Tabelle (man weiß ja nicht was links oder rechts steht) ? wenn nein was muss man dann beachten ?


An sich ist es egal…

Zu beachten gilt halt, dass beim Left Join die Tabelle, aus der du Alle Tupel haben willst links steht und beim Right Join rechts.

Außerdem auch zu beachten, dass die Null-Werte auf der Join-Bedingung basierend eingefügt werden und erst danach die WHERE-Klausel ausgeführt wird.

Unteranfrage
wie erkennt man an Hand einer komplexen Anfrage wann man unteranfragen verwenden kann
wann erkennt man Gruppierung Attribute ?
Woran erkennt man dass man in der Having Klausel die gruppen noch mal einschränken muss?


Unteranfragen braucht man eigentlich nie, da man stattdessen Joinen kann.

Was du mit “Gruppierung Attribute” meinst weiß ich nicht.

Ob du eine Having-Klausel nutzen willst hängt davon ab, ob du Bedingungen hast, die die aggregierten Werte betreffen.