Zurück zur Artikelliste Artikel
7 Leseminuten

Kann man zwei Tabellen ohne eine gemeinsame Spalte verbinden?

Ja, das können Sie! Die längere Antwort lautet: Ja, es gibt einige Möglichkeiten, zwei Tabellen ohne gemeinsame Spalte zu kombinieren. Darunter CROSS JOIN (kartesisches Produkt) und UNION. Letzteres ist technisch gesehen keine Verknüpfung, kann aber für die Zusammenführung von Tabellen in SQL nützlich sein. In diesem Artikel führe ich Sie anhand von Beispielen durch die verschiedenen Lösungen.

Wann müssen Sie Tabellen ohne eine gemeinsame Spalte zusammenführen?

Anfänger, die gerade erst mit SQL anfangen, werden in der Regel mit den Standard Equi-Joins vertraut gemacht, bei denen zwei Tabellen durch eine gemeinsame Spalte verbunden werden. In der Praxis sind die Aufgaben eines Datenanalysten jedoch meist vielfältiger und komplexer.

Es gibt zum Beispiel viele Anwendungsfälle für einen Nicht-Equi-Join, bei dem zwei Tabellen unter Verwendung anderer bedingter Operatoren als dem Gleichheitszeichen kombiniert werden. Wenn Sie mit dieser Art von JOIN nicht vertraut sind, sehen Sie sich unseren interaktiven SQL-JOINs Kurs an. Er bietet über 90 praktische Übungen zu verschiedenen Arten von JOINs.

In anderen Fällen möchten Sie vielleicht jede Kombination von Zeilen aus den beiden Tabellen haben. Wenn Sie z.B. ein Restaurant betreiben, möchten Sie evtl. alle möglichen Kombinationen von Weinen aus Ihrer Weinkarte und Hauptgerichten aus Ihrer Speisekarte sehen.

Oder stellen Sie sich vor, dass die Informationen über Ihre Lieferanten in verschiedenen Tabellen gespeichert sind. Vielleicht haben sie sogar unterschiedliche Spaltennamen je nach Produktart (z. B. Weine, Säfte, Früchte usw.). Möglicherweise möchten Sie alle Informationen zusammenführen, um eine einzige Tabelle mit allen Lieferanten zu erstellen.

In diesen Fällen würden Sie zwei oder mehr Tabellen kombinieren wollen, ohne eine gemeinsame Spalte zu benötigen. Das klingt, als ob es sich um eine ziemlich einfache SQL-Zuweisung handeln müsste. Das ist es natürlich auch! Ich werde in diesem Leitfaden einige Lösungen vorschlagen.

Aber zuerst wollen wir uns die Daten ansehen, die wir für unsere Beispiele verwenden.

Lernen Sie die Daten kennen

Wir betreiben ein Restaurant und haben relevante Daten in mehreren Tabellen gespeichert, unter anderem in wine und main_course.

Die Tabelle wine Tabelle enthält die Wein-ID, den Weinnamen, die Lieferanten-ID und den Preis:

idnamesupplier_idprice
1Merlot5007.95
2House4002.45
3Sangiovese6005.20

Die Tabelle main_course Tabelle enthält für jedes Gericht die ID des Hauptgerichts, den Namen, die Lieferanten-ID des Hauptlieferanten für dieses Gericht und den Preis:

main_course

idnamemajor_supplier_idprice
1Cardamom Maple Salmon20019.99
2Classic Macaroni & Cheese1008.99
3Baked Teriyaki Chicken30011.99
4Blue Cheese Beef Tenderloin40015.99

Schauen wir uns an, wie wir diese Tabellen kombinieren können, um die gewünschten Ergebnisse zu erhalten.

Kombinieren von zwei Tabellen ohne eine gemeinsame Spalte

In unserem ersten Beispiel wollen wir alle möglichen Kombinationen von Weinen und Hauptgerichten aus unserem Menü sehen. Es gibt mindestens zwei Ansätze für die Kombination der wine- und der main_course-Tabelle, um das gewünschte Ergebnis zu erhalten.

Verwendung der "FROM Tabelle1, Tabelle2"-Syntax

Eine Möglichkeit, zwei Tabellen ohne eine gemeinsame Spalte zu verbinden, ist die Verwendung einer veralteten Syntax für die Verbindung von Tabellen. Bei dieser Syntax werden die Tabellen, die verbunden werden sollen, einfach in der FROM-Klausel aufgelistet. Anschließend wird eine WHERE-Klausel verwendet, um bei Bedarf Bedingungen für die Verbindung hinzuzufügen.

Wenn wir jede Kombination von Zeilen aus zwei Tabellen suchen, brauchen wir keine Verknüpfungsbedingungen hinzuzufügen. Wir können eine Abfrage wie diese verwenden:

SELECT w.name AS wine, m.name AS main_course
FROM wine w, main_course m;

Die Abfrage gibt ein kartesisches Produkt (eine Kreuzverknüpfung) zurück, dessen Ergebnismenge die Gesamtzahl der Zeilen enthält, die der Anzahl der Zeilen in der ersten Tabelle multipliziert mit der Anzahl der Zeilen in der zweiten Tabelle entspricht.

winemain_course
MerlotCardamom Maple Salmon
HouseCardamom Maple Salmon
SangioveseCardamom Maple Salmon
MerlotClassic Macaroni & Cheese
HouseClassic Macaroni & Cheese
SangioveseClassic Macaroni & Cheese
MerlotBaked Teriyaki Chicken
HouseBaked Teriyaki Chicken
SangioveseBaked Teriyaki Chicken
MerlotBlue Cheese Beef Tenderloin
HouseBlue Cheese Beef Tenderloin
SangioveseBlue Cheese Beef Tenderloin

Wir haben das gewünschte Ergebnis erhalten. Dies ist eine praktikable Lösung für die Verknüpfung zweier Tabellen, wenn das Ziel darin besteht, eine Ergebnismenge mit allen möglichen Kombinationen der Zeilen zu erhalten. Dies ist jedoch nicht der beste Ansatz.

SQL-Praktiker ziehen es vor, für diese Art von Operation das ausdrückliche Schlüsselwort CROSS JOIN zu verwenden. Es macht deutlich, dass wir absichtlich einen Cross-Join durchführen und nicht aus Versehen die Join-Bedingung WHERE weglassen, was bei der Verwendung der veralteten Syntax für den Tabellen-Join passieren kann.

Lesen Sie mehr über die Vorteile der neuen Syntax für die Verknüpfung von Tabellen in unserem Artikel Was ist der Unterschied zwischen JOIN und mehreren Tabellen in FROM?

Verwendung des CROSS JOIN-Operators

Wie Sie vielleicht schon erraten haben, ist der zweite Ansatz, um alle möglichen Kombinationen von Zeilen aus zwei Tabellen zu erhalten, die Verwendung des CROSS JOIN Operators:

SELECT w.name AS wine, m.name AS main_course
FROM wine w
CROSS JOIN main_course m;

Die Abfrage gibt genau die gleiche Ergebnismenge aus wie die zuvor gezeigte. Diese Syntax ist jedoch vorzuziehen, da sie die Absicht, einen CROSS JOIN durchzuführen, deutlich macht und für andere Benutzer Ihres SQL-Codes besser lesbar ist.

Erfahren Sie mehr über Cross-Joins in unserem Leitfaden zu SQL CROSS JOIN.

Verwendung von UNION oder UNION ALL

Es gibt weitere Anwendungsfälle für die Kombination zweier Tabellen ohne gemeinsame Spalte. Wie in dem oben erwähnten Beispiel möchten Sie vielleicht alle in mehreren Tabellen gespeicherten Lieferanteninformationen konsolidieren. In diesem Fall wollen Sie kein kartesisches Produkt. Wie kombinieren Sie also die Tabellen?

Für so einen Fall verwenden Sie eine UNION, um Informationen aus mehreren Tabellen zusammenzuführen. Dabei handelt es sich technisch gesehen nicht um eine Verknüpfung. Sie kann jedoch sehr nützlich sein, um Zeilen aus mehreren Tabellen zu kombinieren, wie in unserem Beispiel unten.

Einfach ausgedrückt, kombiniert JOINs Daten, indem die Spalten einer Tabelle an die Spalten einer anderen Tabelle angehängt werden. Im Gegensatz dazu werden bei UNIONs Daten kombiniert, indem die Zeilen an die Zeilen einer anderen Tabelle angehängt werden.

Wenn wir also eine kombinierte Liste der Lieferanten-IDs aus den Tabellen wine und main_courseerstellen möchten, können wir die folgende SQL-Abfrage verwenden:

SELECT w.supplier_id
FROM wine w
UNION
SELECT m.major_supplier_id
FROM main_course m
ORDER BY supplier_id;

Hier wählen wir zunächst die Lieferanten-IDs aus der Tabelle wine-Tabelle (Spalte supplier_id) und aus der main_course-Tabelle (Spalte major_supplier_id) getrennt aus. Dann kombinieren wir diese Zeilen mit dem Schlüsselwort UNION. Schließlich wird das Ergebnis der Einfachheit halber sortiert:

supplier_id
100
200
300
400
500
600

Beachten Sie Folgendes, wenn Sie UNION in SQL verwenden:

  • Alle SELECT Anweisungen sollten die gleiche Anzahl von Spalten auflisten.
  • Die entsprechenden Spalten müssen den gleichen Datentyp haben.
  • Die korrespondierenden Spalten können, wie in unserem Beispiel, unterschiedliche Namen haben. Standardmäßig wird der Name der entsprechenden Spalte in der Ausgabe aus der ersten SELECT-Anweisung übernommen. Falls erforderlich, können Sie die Namen für die resultierenden Spalten mit dem Schlüsselwort AS festlegen. Beachten Sie, dass die Spalten aus verschiedenen Tabellen in der gleichen Reihenfolge benannt werden müssen, damit sie korrekt übereinstimmen.
  • Der Operator UNION entfernt Duplikate aus der Ergebnismenge. Wie Sie vielleicht bemerkt haben, war die supplier_id 400 in beiden Tabellen enthalten, aber sie erscheint nur einmal in der Ergebnismenge. Wenn Sie nicht möchten, dass die Duplikate entfernt werden, verwenden Sie stattdessen den Operator UNION ALL:

    SELECT w.supplier_id
    FROM wine w
    UNION ALL
    SELECT m.major_supplier_id
    FROM main_course m
    ORDER BY supplier_id;
    

Das Ergebnis dieser Abfrage enthält die supplier_id 400 zweimal:

supplier_id
100
200
300
400
400
500
600

Wenn weder CROSS JOIN noch UNION auf Ihren Anwendungsfall der Kombination von zwei Tabellen ohne gemeinsame Spalte anwendbar sind, sehen Sie sich diesen Artikel mit Beispielen für Nicht-Equi-Joins an. Vielleicht finden Sie dort einige relevante Beispiele.

Zeit zum Üben von CROSS JOINs und UNIONs!

Sie wissen nun eine Menge über die Kombination von Tabellen ohne gemeinsame Spalte. Sie sind auf die Frage vorbereitet, wie man zwei Tabellen ohne eine gemeinsame Spalte kombinieren kann. Dies ist eine sehr häufige Frage in SQL-Einstellungsgesprächen!

Wenn Sie mehr über JOINs erfahren möchten, sehen Sie sich das Video SQL JOIN Basics aus unserer Reihe "We Learn SQL" auf YouTube an. Probieren Sie auch den Leitfaden von LearnSQL.de aus, in dem es um die besten Möglichkeiten geht, SQL-JOINs zu lernen.

Wahrscheinlich wissen Sie aber schon, dass der kürzeste Weg zum SQL-Experten über viel Übung beim Schreiben von SQL-Abfragen führt. LearnSQL.de bietet einen umfassenden Kurs zu SQL-JOINs mit 93 interaktiven Übungen. In diesem Kurs haben Sie die Möglichkeit, alle Arten von grundlegenden JOINs zu üben, einschließlich CROSS JOINs, Self-Joins, Non-Equi-Joins und Joins von mehreren Tabellen.

Viel Spaß beim Lernen!