Rolf b: Datenbanken join vs. union

Beitrag lesen

Hallo Henry,

die OMA-kompatible Erklärung wäre: Ein JOIN stellt beliebige Relationen nebeneinander, ein UNION gleichartige Relationen untereinander.

Es gibt unterschiedliche Gründe für einen UNION. Zwei Beispiele:

  • Mehrere Tabellen mit ähnlicher/gleicher Struktur, und Du brauchst ein übergreifendes Ergebnis (wobei dann natürlich zu diskutieren wäre, warum es überhaupt mehrere Tabellen sind)
  • Eine Tabelle, aus der Du in mehreren Abfragen Datensätze herausholst, die Du gemeinsam verarbeiten willst. Die Abfragen sind strukturell unterschiedlich, so dass kein gemeinsamer WHERE möglich ist.

Einen JOIN machst Du, wenn Du Tabellen hast, die unterschiedliche Daten enthalten, aber inhaltlich in Bezug stehen.

  • Klartext für einen Schlüsselwert - im Modell des OP: Ausgabenartschlüssel und Text dazu
  • Stammdaten und mit mehreren Details zum Stammsatz - siehe das Modell des OP: Gebäude und Ausgaben

Klartextabfragen (oder generell JOINs, bei denen aus der zugeJOINten Tabelle genau ein Wert verwendet wird) kann man auch als Subselects formulieren. Einem guter SQL Optimizer sollte das wurscht sein, Subselects haben den Vorteil, dass man sie getrennt testen kann.

Mein SQL von oben mit Subselect:

SELECT G.Gebäude-ID, 
       (SELECT Bezeichnung FROM Ausgabentypen AT WHERE AT.ID=A.Ausgabentyp),
       A.Jahr, A.Kosten
FROM Gebäude G 
     LEFT JOIN Ausgaben A ON G.ID=A.Gebäude-ID

Edit: Dass Dedlfix das schon vor einer halben Stunde geschrieben hat, sehe ich jetzt erst 😉

Rolf

--
Dosen sind silbern