Zum Hauptinhalt springen

Wie man Daten aus zwei Tabellen in SQL ableitet, ohne die JOIN-Anweisung zu verwenden: ein einfacher Weg

Bei der Arbeit mit SQL ist es manchmal notwendig, Daten aus zwei oder mehr Tabellen zu kombinieren. Normalerweise verwenden Sie dazu den JOIN-Operator, mit dem Sie Zeilen aus verschiedenen Tabellen basierend auf einer bestimmten Bedingung verbinden können. Manchmal stoßen wir jedoch auf eine Situation, in der die Verwendung eines JOINS unpraktisch oder unmöglich ist.

Mit der UNION-Anweisung können Sie die Ergebnisse mehrerer SELECT-Abfragen in einem Datensatz kombinieren. Wir können damit Daten aus zwei Tabellen kombinieren, ohne einen JOIN zu verwenden.

Eine einfache Möglichkeit, dieses Ziel zu erreichen, besteht darin, Unterabfragen zu verwenden. Mit Unterabfragen können Sie eine Abfrage für eine einzelne Tabelle ausführen und ihr Ergebnis in der Hauptabfrage verwenden.

SELECT * FROM table1 WHERE column1 IN (SELECT column2 FROM table2 WHERE condition);

In diesem Beispiel wählen wir alle Zeilen aus der Tabelle "table1" aus, wobei der Wert der Spalte "column1" einem der Werte aus der Spalte "column2" in der Tabelle "table2" entspricht, die die angegebene Bedingung erfüllen.

Mit diesem Ansatz können Sie Daten aus zwei Tabellen kombinieren, ohne den JOIN-Operator zu verwenden, und dies kann nützlich sein, wenn Sie komplexe Abfragen ausführen oder große Datenmengen verarbeiten möchten, bei denen die Verwendung von JOIN möglicherweise ineffizient ist.

Überblick über das Problem

Es gibt jedoch manchmal Situationen, in denen die Verwendung des JOIN-Operators unerwünscht oder schwierig ist. Dies kann beispielsweise auf Leistungsanforderungen, komplexe hierarchische Beziehungen oder fehlende Indizes zurückzuführen sein.

In solchen Fällen ist es hilfreich, alternative Methoden zur Datenzusammenführung zu kennen. Eine davon ist die Verwendung von Unterabfragen oder temporären Tabellen.

In diesem Artikel betrachten wir eine einfache Möglichkeit, Daten aus zwei Tabellen abzuleiten, ohne den JOIN-Operator zu verwenden, was in bestimmten Situationen nützlich sein kann.

Methode 1: Verwenden von Unterabfragen

SELECT *FROM table1WHERE column1 IN (SELECT column2 FROM table2);

In dieser Abfrage wählen wir alle Spalten aus table1 aus, wobei der Wert der Spalte column1 im Resultset der Unterabfrage enthalten ist. Die Unterabfrage wählt die Spalte column2 aus der Tabelle table2 aus.

Die Verwendung von Unterabfragen ermöglicht es Ihnen, die Tabellenföderationslogik innerhalb einer Abfrage zu platzieren, was in einigen Situationen nützlich sein kann.

Es ist jedoch erwähnenswert, dass Unterabfragen möglicherweise weniger effizient sind als das Zusammenführen von Tabellen mit dem JOIN-Operator. Bevor Sie Unterabfragen verwenden, sollten Sie daher ihre Leistung bewerten und die am besten geeignete Option für Ihre Aufgabe auswählen.

Methode 2: Verwenden des UNION-Operators

Wenn Sie die JOIN-Anweisung in SQL nicht zum Zusammenführen von zwei Tabellen verwenden können, können Sie den UNION-Operator verwenden, mit dem Sie die Ergebnisse zweier Abfragen ohne Duplizierung kombinieren können.

So können Sie den UNION-Operator verwenden, um Daten aus zwei Tabellen zu kombinieren:

  1. Schreiben Sie zwei separate SELECT-Abfragen für jede der Tabellen.
  2. Verwenden Sie den UNION-Operator zwischen diesen beiden Abfragen.
  3. Stellen Sie sicher, dass die Spalten in beiden Abfragen denselben Datentyp und dieselbe Reihenfolge aufweisen, damit der UNION-Operator die Ergebnisse korrekt zusammenführen kann.

Beispiel für die Verwendung des UNION-Operators:

SELECT column1, column2FROM table1UNIONSELECT column1, column2FROM table2;

Nachdem Sie diese Abfrage ausgeführt haben, erhalten Sie ein Ergebnis, das eindeutige Zeilen aus beiden Tabellen enthält.

Obwohl die Verwendung des UNION-Operators in einigen Szenarien nützlich sein kann, empfiehlt es sich im Allgemeinen, den JOIN-Operator zu verwenden, um Daten aus zwei Tabellen zu kombinieren. Der UNION-Operator ist bei großen Datenmengen möglicherweise weniger effizient und langsam. Es erlaubt auch nicht, komplexe Joinbedingungen zu erfüllen oder andere Join-Typen wie LEFT JOIN oder RIGHT JOIN zu verwenden.

Methode 3: Verwenden einer temporären Tabelle

Wenn Sie Daten aus zwei Tabellen zusammenführen möchten, ohne den JOIN-Operator zu verwenden, können Sie die Methode zur Verwendung einer temporären Tabelle verwenden.

Dazu erstellen Sie eine temporäre Tabelle, die Daten aus beiden Tabellen enthält. Sie können dann eine Abfrage ausführen, um die gewünschten Daten aus dieser temporären Tabelle auszuwählen.

Tabelle 1Tabelle 2
Aufnahme 1Aufnahme 1
Aufnahme 2Aufnahme 2
Aufnahme 3Aufnahme 3

Eine temporäre Tabelle kann wie folgt erstellt werden:

CREATE TABLE temp_table ASSELECT * FROM table1UNION ALLSELECT * FROM table2;

Nachdem die temporäre Tabelle erstellt wurde, können Sie eine Abfrage ausführen, um die gewünschten Daten auszuwählen:

SELECT * FROM temp_table;

Diese Abfrage gibt alle Daten aus einer temporären Tabelle aus, die Daten aus beiden Tabellen enthält.

Methode 4: Verwenden von Variablen

Diese Methode basiert auf der Erstellung einer Variablen, in der der Wert einer Tabelle gespeichert wird und dieser Wert dann zum Verknüpfen mit einer anderen Tabelle verwendet wird.

Definieren Sie zunächst eine Variable und weisen Sie ihr einen Wert zu:

DECLARE @table1_value INT; SET @table1_value = (SELECT column_name FROM table1 WHERE condition);

Verwenden Sie dann die Variable, um die Daten aus der zweiten Tabelle abzurufen:

SELECT * FROM table2 WHERE column_name = @table1_value;

Auf diese Weise können wir mit einer Variablen Daten aus zwei Tabellen abrufen, ohne den JOIN-Operator zu verwenden. Beachten Sie jedoch, dass diese Methode bei der Arbeit mit großen Datenmengen möglicherweise ineffizient ist und möglicherweise zusätzlichen Code zur Fehlerbehandlung benötigt.