PSQL - Ein paar Fragen

Moin coder111,

es gibt doch nun wirklich nich' 72 verschiedene Arten von JOINs in SQL, also nicht karierte und geschwurbelte und welche mit Noppen, sondern gerade mal eine Handvoll.
Wobei nicht einmal jedes Datenbanksystem alle Arten kennt.
Diese Handvoll JOINs wurden dir doch schon in mehreren Tutorials und Videos leicht verdaulich und anpassbar an jegliche individuelle Lerngeschwindigkeit präsentiert.
Und danach noch hier im Forum von mehreren persönlichen Coaches vorgesungen.

5 cm über meinem Kommentar steht ein Zitat von einer großen Suchmaschine zum Thema FULL (OUTER) JOIN, das in in Kürze, Knackigkeit und Vollständigkeit kaum zu toppen ist.

WASSN JEZZ NOCH FÜR'N BEISPIEL???

'Tschuldigung.

Also, angenommen ich hätte eine Tabelle "Users" und eine Tabelle "Kumpels".

In "Users" stehen im einzigen Feld "UserName"
- Daisy Duck
- Max Muster
- Peter Pan

In "Kumpels" stehen im einzigen Feld "KumpelsName"
- Harry Hirsch
- Peter Pan

Nun rate doch mit:
a) Wie sieht ein INNER JOIN aus?
( SELECT * FROM Users INNER JOIN Kumpels on Users.UserName=Kumpels.KumpelsName)
-> Nur EIN Datensatz wird angezeigt, nämlich derjenige, der in beiden Tabellen vorhanden ist
-> Oder, wie es meistens ausgedrückt wird, wo linke Tabelle und rechte Tabelle einen gleichen Wert haben (neudeutsch "mätschen")
Ergebnis wäre
Username KumpelsName
Peter Pan Peter Pan

Testfrage a1)
Wie sähe ein JOIN aus OHNE den Zusatz INNER?
( SELECT * FROM Users JOIN Kumpels on Users.UserName=Kumpels.KumpelsName)
Genauso.

Testfrage a2) Wie sähe das als NATURAL JOIN aus?

Gar nicht, denn es gibt kein Feld, das in beiden Tabellen gleich heisst und in der USING-Klausel verwendet werden kann.

b) Wie sähe ein LEFT JOIN aus?
( SELECT * FROM Users LEFT JOIN Kumpels on Users.UserName=Kumpels.KumpelsName)
- alle Datensätze der LINKEN Tabelle werden angezeigt, von der RECHTEN Tabelle die matchenden Werte (falls vorhanden), sonst NULL-Werte
- also
UserName Kumpelsname
Daisy Duck (NULL)
Max Muster (NULL)
Peter Pan Peter Pan

Testfrage b1) Wie wäre es bei einem LEFT OUTER JOIN statt einem LEFT JOIN?
-> Is' sich das Selbe. "OUTER" ist nur ein optionales Füllwort, leichter zu merken bzw. zu unterscheiden vom INNER JOIN

c) wie sieht wohl ein RIGHT JOIN == RIGHT OUTER JOIN aus?
( SELECT * FROM Users RIGHT JOIN Kumpels on Users.UserName=Kumpels.KumpelsName)
- alle Datensätze der RECHTEN Tabelle werden angezeigt, von der LINKEN Tabelle die matchenden Werte (falls vorhanden), sonst NULL-Werte
- also
UserName Kumpelsname
(NULL) Harry Hirsch
Peter Pan Peter Pan

d) Nun der coup de grace : wie sieht jezz' wohl ein FULL (OUTER) JOIN aus??
( SELECT * FROM Users FULL OUTER JOIN Kumpels on Users.UserName=Kumpels.KumpelsName)
(Falls die Datenbank das kann, die Microsoft-Dinger z.B. kennen keinen FULL JOIN.)
-> Alle Datensätze der LINKEN und alle Datensätze der RECHTEN Tabelle werden ausgegeben.
--> Wo es matcht, da auf beiden Seiten, sonst nur links oder rechts (halt wo vorhanden)
UserName Kumpelsname
Daisy Duck (NULL)
Max Muster (NULL)
Peter Pan Peter Pan
(NULL) Harry Hirsch

Dann gibt es noch den CROSS JOIN und den bengalischen Bergjoin, aber die braucht kein Mensch.

So, deine andern Restfragen muss jemand mit mehr Geduld machen.
Ausserdem hab ich noch nie von deinen mehrfach genannten "Unternfragen" gehört - das Wort hab ich erst durch dich kennengelernt.

Wann und wie man die einbaut... ich denke dienstags wäre ganz gut und ich würde sie so sorgfältig einbauen wie einen Staubsaugerbeutel.

Und hey! Wo du Klammern setzt - nur da, wo es sonst für den Parser missverständlich wird (z.B. bei mehreren AND und OR-Bedingungen) oder dort, wo die jeweilige Datenbank diese Syntax vorschreibt

Grüße
Biber
 
Zuletzt bearbeitet:
Zurück