PSQL - Wann welchen Join verwenen?

coder111

Mitglied
Hallo,
Bei SQL Abfragen fällt es mir immer noch schwer zu entscheiden, wann ich welchen Join benutzen muss.

Das ist so eine Beispielaufgabe. Ich weiß man benötigt einen Join aber ich weiß nicht, ob Left, Inner oder Natural Join usw.

Erzeugen Sie eine Liste der Studenten, die jemals an einem Praktikum zum Kurs
Programmieren teilgenommen haben.

Könntet ihr mir allgemein erklären, woher ich weiß, welchen Join ich benutzen muss?
vielleicht anhand eines Flussdiagramms?
 
LEFT JOIN: Nimm alle Daten aus Tabelle A und wenn passend, ergänze sie mit Tabelle B (A LEFT JOIN B)
INNER JOIN: Nimm alle Daten aus A und B wenn die Keys übereinstimmen (A INNER JOIN B)
NATURAL JOIN: Kenn ich selber nicht -> Hier en vergleich zu INNER JOIN https://stackoverflow.com/questions/8696383/difference-between-natural-join-and-inner-join

Sprich, INNER JOIN grenzt A ein, LEFT JOIN nicht

Bei dir. Der Praktium-Kurs grenz die Studenten ein. Ergo studenten INNER JOIN praktikumteilnahme
 
Mir ist schon klar, was die einzelnen Joins machen. Wenn ich aber eine Aufgabe versuche zu lösen, dann weiß ich trotzdem nicht, welchen Join ich verwenden muss.

Dazu bräuchte ich noch ein paar Tipps, wie man herausfindet, welchen Join man verwenden soll.
 
Drehen wir die Logik um.
Soll die eine Tabelle die andere filtern & ergänzen -> INNER JOIN
Soll die eine Tabelle die andere nur ergänzen -> LEFT JOIN
 
Moin coder111,

ich dachte, das Thema "Unterschiede zwischen den JOINs" hatten wir schon so ausführlich erklärt wie vertretbar.
Du hattest doch neulich so einen Beitrag "PSQL -Ein paar Fragen", da wurde es doch von x Leuten mit immer wieder anderen Formulierungen noch und noch versucht.

Egal, Flusspferde und Flussdiagramme kann ich nicht malen, ich versuch es mal mit Worten.


Ich unterstelle mal (wie Yaslaw auch) ,
- es gibt eine Tabelle "studenten" und eine Tabelle "praktikumteilnahme" (und sicherlich eine Tabelle "AllePraktikumse"
- die ersten beiden Tabellen haben (mindestens) ein Feld, mit dem sie sich verknüpfen lassen, Z.B. eine "StudentInnen_ID".
. in "studenten" stehen also StudentInnen_ID, Name, Anschrift, Bla1, ... blaN
in "AllePraktikumse" stehen "Praktikum_ID" und "PraktikumName" und "Starttermin", "Endtermin"
-in "praktikumteilnahme" lassen sich sowohl Datensätze wiederfinden zu Studenten wie auh zu Praktika, wieil es dor u.a. eine "Praktikum_ID" wie eine "StudentInnen_ID" gibt.

Die Fragestellung war doch
"Erzeugen Sie eine Liste der Studenten, die jemals an einem Praktikum zum Kurs Programmieren teilgenommen haben"

-> WENN da steht, "eine Liste ALLER X-Datensätze , gegebenfalls ergänzt um Zusatzinformationen aus anderen Y,Z-Tabellen, fallls vorhanden)"
--> DANN "SELECT .. FROM X LEFT JOIN Y on (gemeinsame Felder von X und Y) LEFT JOIN Z on (gemeinsame Felder von Y und Z)

In allen Fällen, in denen NUR die Datensätze angezeigt werden sollen, die in der drangeJOINten Tabelle einen bestimmten Wert haben
--> ist es ein INNER JOIN.

Also, steht bei dir jetzt "eine Liste ALLER 10745 StudentInnen, egal ob und an welchem Praktikum sie teilgenommen haben"?
Oder steht da "eine Liste NUR der 37 StudentInnen, die auch in der Tabelle praktikumsteilnahme stehen und bei denen das Praktikum 'Programmierung' hiess"?

Sonst lies doch noch mal in deinem letzten hier erzeugten Beitrag nach, da gibt es Beispiele.

Grüße
Biber
 
@Biber3
Sorry, aber ich weiß immer noch nicht, wann man einen INNER, LEFT oder NATURAL JOIN nimmt.
Kann ich dir eine PN schreiben?

@Yaslaw
könntest du diese Punkte näher erläutern?

Soll die eine Tabelle die andere filtern & ergänzen -> INNER JOIN
Soll die eine Tabelle die andere nur ergänzen -> LEFT JOIN
 
Yaslaw
könntest du diese Punkte näher erläutern
Könnte ich. Ich tu es aber nicht. Es gibt genügend Erklärungen hier im Forum und im weiten Web.
Es bringt nix, wenn ich nochmals eine abliefere.
Du hast auch schon ganz viele Erklärungen bekommen. Ausführliche sowie Stichwortartige (meine). Beide scheinst du nicht zu verstehen
 
Zuletzt bearbeitet:
Zurück