Microsoft Access, SQL-Abfrage mit mehreren Tabellen/ Equi Join, wie funktioniert das?

3 Antworten

Ich mache alles mit WHERE, das geht am einfachsten und ist leicht nachvollziehbar. Meine größte Datenbank, die bei einem Kunden im Einsatz ist, hat 57 Datenbanktabellen mit z.T. sehr komplexen Verknüpfungen.

In Deinem Beispiel ginge das so:

SELECT planet-name, mond-name FROM planet-tabelle, mond.tabelle WHERE mond-id.planet-tabelle = mond-id.mond.tabelle

Du hast probiert:

select planet.name, mond.name from planet, mond;

Da hast Du aber eine große Ergebnistabelle bekommen: Jede Zeile aus planet wurde mit allen Datensätzen aus mond kombiniert. Das nennt man ein kartesisches Produkt undbei großen Datenbanktabellen ist das der größe anzunehmende Unfall. Außerdem werden kartesische Produkte praktisch nie gebraucht, obwohl man sie immer kriegt, wenn man vergißt, join-Bedingungen hinzuschreiben. Das ist eben SQL.

Wenn Informationen über zwei Tabellen verstreut sind, brauchst Du jedenfalls einen Join. Einen Equijoin kannst Du ohne weiteres auch in die WHERE-Klausel einer SELECT-Anweisung schreiben.

SELECT planet.name, mond.name
  FROM planet, mond
  WHERE plane.name = mond.planet;

Das ist ziemlich alter SQL-Stil, so wurden die Join-Bedingungen geschrieben, bevor SQL so erweitert wurde, dass sie auch in der FROM-Klasusel angegeben werden können. Vielleicht lernt ihr in der Schule diese alten SQL-Schreibweise.

In der Anworttabelle der oben angegebenen Abfrage kommen Planeten, die überhaupt keinen Mond haben, allerdings nicht vor. GoaSkin hat Dir einen LEFT JOIN vorgeschlagen, um auch diese Planeten in der Ergebnistabelle zu erhalten, wenn auch ohne Mond. Das ist durchaus gescheit, aber wenn ihr das in der Schule nicht genau genug gelernt habt, hilft dir diese an sich sehr gute Antwort leider nicht weiter.

ah ich verstehe. danke das hat mir sehr geholfen! :)

0

SELECT * FROM monde LEFT JOIN planeten ON monde.xx = planeten.xx

xx => die Spalte, die in beiden Tabellen den gleichen Inhalt hat (ich nehme an der Name des Planeten, der in beiden Tabellen vorkommt.

aber da ist ja wieder ein left join drin, und das würde ich ja gern vermeiden, weil wir das nie im Unterricht hatten :/ geht das auch mit where oder in?

0
@Tinchen272

WHERE ist nur gedacht, um Bedingungen in die Abfrage einzubringen, damit nicht alle Zeilen ausgegeben werden.

SELECT * FROM monde LEFT JOIN planeten ON monde.xx = planeten.xx WHERE planet.name='erde'

würde dann nur die Zeile mit dem Erdmond ausgeben, für diese aber dann die Felder aus beiden Tabellen.

Um zwei Tabellen zu verbinden braucht man immer JOIN.

Bei MS Access kann man sich natürlich auch die Abfragen menügeführt zusammenbasteln. Dann muss man nicht wissen, wie die zugehörige SQL-Abfrage geht.

0
@GoaSkin

GoaSkin das ist falsch, man kann und darf WHERE als JOIN Bedingung benutzen

0
@djdeejay

Ich benutze nur WHERE zum Verknüpfen, weil das einfacher zum überschauen ist. Ich habe eine Datenbank mit 57 Tabellen mit teils sehr komplexen Verknüpfungen, die möglicherweise mit JOINs gar nicht hinzubekommen sind, jedenfalls nicht einfach überschaubar.

0

Was möchtest Du wissen?