Ilja: -> (MySQL) -> Inner, outter, left, right join || welches ist es?

Beitrag lesen

hi Aqua,

das mit den joins ist am anfang ein wenig kniffelig. aber wenn der groschen mal gefallen ist, dann ist es wie ein geistesblitz. joins beziehen sich immer auf mehrere tabellen. lassen wir sonderfälle mal weg, wo joins auf einer tabelle gebildet werden und nehmen nur zwei verschiedene tabellen. die eine zeigt alle spieler einer fussballmanschaft auf und die zweite listet ihre titel auf.

tabelle spieler:

id, vorname, nachname, alter, spielernummer
 1,    Gerd,   Müller,    56,      9
 2,   Franz, Beckenbauer, 57,      2
 3,  Oliver,     Kahn,    33,      1

tabelle titel:

spieler_id,        titel, datum
     1    ,  Weltmeister, 1974
     1    ,Europameister, 1972
     2    ,  Weltmeister, 1974

jetzt kann du einen inner join (oftmnals auch theta join oder equi join genannt) über die zwei tabelen bilden, um herauszubekommen, wer welche titel gewonnen hat. das ergebnis wären drei datensätze, zwei für gerdi und einen für den kaiser. so weit so gut.

das problem mit dem inner join ist, du kannst damit nicht alles lösen. wenn du zum beispiel nun alle spieler angezeigt haben willst und ihre gewonnen titel, dann würde mit einem inner join (gleicheit) immer der gute kahn wegfallen, da er in der titel tabelle nie vorkommt.

genau auf diesem problem setzen die outer joins auf. hier kann man nun wörtlich sagen, zeige mir alle spieler in der linken tabelle (left join) an und wenn sie einen titel haben, dann zeige mir auch den an. und somit bekommen wir den guten kahn auch wieder rein in unsere ausgabe. in unserem falle hätten wir dann 4 datensätze, zwei für gerdi, einen für den kaiser und einen für kahni. left join heißt wörtlich ausgedrückt, nimm alle datensätze aus der linken tabelle und schau, ob du einträge dafür in der rechten tabelle findest.

Ilja