Zurück zur Artikelliste Artikel
8 Leseminuten

Wie man Tabellen in SQL ohne JOINs verbindet

Hier erfahren Sie, wie Sie Tabellen ohne das JOIN Schlüsselwort.

Es scheint unmöglich zu sein: Tabellen in SQL zu verbinden, ohne das Schlüsselwort JOIN zu verwenden. Aber die Verwendung des Schlüsselworts JOIN ist nicht die einzige Möglichkeit, Tabellen in SQL zu verbinden.

In diesem Artikel werden zwei weitere Methoden zum Verbinden von Tabellen vorgestellt. Keine der beiden Methoden erfordert das Schlüsselwort JOIN, um zu funktionieren. Sie sind:

  1. Die Verwendung eines Kommas zwischen den Tabellennamen in der FROM Klausel und die Angabe der Verknüpfungsbedingung in einer WHERE
  2. Verwendung von UNION/UNION ALL.

Ich gehe davon aus, dass Sie wissen, wie JOINs funktionieren. Falls Sie es brauchen, hier eine Auffrischung, wie man Tabellen mit JOINs verbindet .

Die erste Methode: FROM und WHERE

Syntax

Die Syntax für diese Methode der Tabellenverknüpfung ohne Verwendung von JOINs lautet:

SELECT *
FROM , 
WHERE 

Sie können das Schlüsselwort JOIN durch ein Komma in der Klausel FROM ersetzen. Was tun Sie als nächstes? Es gibt kein ON -Schlüsselwort, mit dem Sie die Verknüpfungsbedingung angeben können, wie es bei der Verwendung von JOIN der Fall wäre, z. B. auf welche zwei Spalten Sie die Tabellen verknüpfen wollen. Bei dieser Methode verwenden Sie einfach eine WHERE -Klausel, um dies zu tun.

Diese Methode macht genau das Gleiche wie:

SELECT *
FROM <table1> JOIN <table2>
ON <condition>

Schauen wir uns an, wie es in der Praxis funktioniert.

Beispiel

In diesem Beispiel muss ich für jeden Künstler den Namen des Künstlers, die Alben, die er/sie aufgenommen hat, und die Jahre, in denen sie aufgenommen wurden, finden.

Um Ihnen zu zeigen, wie diese Methode funktioniert, werde ich zwei Tabellen verwenden. Die erste ist artist:

idartist_name
1Paul Simon
2Marvin Gaye
3Bettye LaVette
4Joni Mitchell
5Sly and the Family Stone

Es handelt sich um eine einfache Tabelle, die einige meiner Lieblingsmusiker enthält.

Die andere Tabelle, albumsieht wie folgt aus:

idalbum_nameyear_recordedartist_id
1Dance to the Music19685
2Small Talk19745
3Stranger to Stranger20161
4I've Got My Own Hell to Raise20053
5Blues19714
6Court and Spark19744
7A Tribute to the Great Nat "King" Cole19652
8Graceland19861
9Still Crazy After All These Years19751
10In the Blue Light20181
11There's a Riot Goin' On19715
12The Scene of the Crime20073
13Mingus19794
14What's Going On19712
15Here, My Dear19782

Dies sind die Alben, die von den Musikern aus der ersten Tabelle aufgenommen wurden.

Abfrage

Die Abfrage für die Verknüpfung dieser Tabellen ohne das Schlüsselwort JOIN sieht wie folgt aus:

SELECT
    artist_name,
    album_name,
    year_recorded
FROM artist, album
WHERE artist.id = album.artist_id;

Zunächst gebe ich die Spalten an, die ich in meinem Ergebnis sehen möchte: artist_name, album_name, und year_recorded. Sie stammen entweder aus artist oder album. Ich verbinde diese beiden Tabellen einfach, indem ich sie in der FROM Klausel aufliste und mit einem Komma trenne.

Die WHERE Klausel wird im Allgemeinen verwendet, um Ergebnisse zu filtern. Ich kann sie verwenden, um dieses Ergebnis so zu filtern, dass es alle Daten anzeigt, bei denen die Spalte id aus der Tabelle artist gleich der Spalte artist_id aus der Tabelle album. Wie Sie sehen, ist die Bedingung in WHERE in dieser Abfrage dieselbe wie nach dem Schlüsselwort ON, wenn Sie JOIN: artist.id = album.artist_id verwenden.

Die entsprechende Abfrage mit dem Schlüsselwort JOIN lautet:

SELECT 	artist_name,
		album_name,
		year_recorded
FROM artist
JOIN album
ON artist.id = album.artist_id;

Ergebnis

Beide Abfragen liefern das gleiche Ergebnis:

artist_namealbum_nameyear_recorded
Paul SimonIn the Blue Light2018
Paul SimonStill Crazy After All These Years1975
Paul SimonGraceland1986
Paul SimonStranger to Stranger2016
Marvin GayeHere, My Dear1978
Marvin GayeWhat's Going On1971
Marvin GayeA Tribute to the Great Nat "King" Cole1965
Bettye LaVetteThe Scene of the Crime2007
Bettye LaVetteI've Got My Own Hell to Raise2005
Joni MitchellMingus1979
Joni MitchellCourt and Spark1974
Joni MitchellBlues1971
Sly and the Family StoneThere's a Riot Goin' On1971
Sly and the Family StoneSmall Talk1974
Sly and the Family StoneDance to the Music1968

Sie sehen, dass das Ergebnis die Daten aus den beiden Ausgangstabellen kombiniert. Ich kann jetzt zum Beispiel sehen, dass Paul Simon das Album "In the Blue Light" im Jahr 2018 aufgenommen hat. Wenn Sie meiner Abfrage nicht trauen, können Sie jederzeit bei Wikipedia nachsehen!

Bei dieser Methode wird eine gemeinsame Spalte zum Verbinden von Tabellen verwendet. Denken Sie daran, dass Sie auch Tabellen verbinden können , die keine gemeinsame Spalte haben.

Die zweite Methode: UNION/UNION ALL

Syntax

SELECT
    ,
    ,
    …
FROM 

UNION / UNION ALL

SELECT
    ,
    ,
    …
FROM 

Sowohl UNION als auch UNION ALL werden verwendet, um das Ergebnis der ersten Abfrage mit dem Ergebnis der zweiten Abfrage zu verbinden. Sie schreiben einfach zwei SELECT Anweisungen und dazwischen UNION oder UNION ALL. Aber was ist der Unterschied zwischen diesen beiden SQL-Schlüsselwörtern? Erinnern Sie sich:

  • UNION entfernt doppelte Zeilen aus der Abfrage und zeigt sie nur einmal an.
  • UNION ALL zeigt alle Zeilen aus beiden Tabellen an, unabhängig davon, wie viele Duplikate es gibt.

Damit sowohl UNION als auch UNION ALL funktionieren, müssen alle Spalten in den beiden Anweisungen SELECT übereinstimmen. Das bedeutet, dass die Anzahl der ausgewählten Spalten gleich sein muss und dass die Datentypen dieser Spalten gleich sein müssen.

Diese beiden Operatoren werden Set-Operatoren genannt. Lesen Sie diesen Artikel, um mehr über diese und andere Set-Operatoren zu erfahren.

Beispiel

Auch in diesem Beispiel haben wir zwei Tabellen. Die erste heißt customer:

idfirst_namelast_name
1JimmyHellas
2FrancoisJambony
3RenataTraviata
4CarmenNaburana
5SteveInicks
6ElviraSamson
7AlpaCino
8RosaSparks
9BernardineSane
10BertRandrussell

Sie enthält eine Liste meiner Kunden.

Die zweite Tabelle lautet supplier:

idfirst_namelast_name
1ArpadPolanski
2BillyVan Persie
3SteveInicks
4Jean-ClaudeZaandam
5EminaArkayeva
6BoMilosz
7JanWrangler
8HeinrichStroopwafel
9HerringoStarr
10JosephineMatijevic
11AlpaCino
12FlintWestwood
13DesPaulmond
14WilmaJackson
15KatrinVerson
16BertRandrussell
17CarmenNaburana
18JimmyTulp
19LuisWolf
20MirandaFanucci

Wenn Sie diese Tabellen etwas genauer betrachten, sehen Sie, dass einige Personen in beiden Tabellen enthalten sind. Schauen Sie sich zum Beispiel Steve Inicks an - das bedeutet, dass Steve, zusammen mit einigen anderen, sowohl mein Kunde (er kauft einige Dienstleistungen von meinem Unternehmen) als auch mein Lieferant (er liefert einige Dienstleistungen an mich) ist.

Schauen wir uns nun an, wie es aussieht, wenn ich diese Tabellen mit UNION oder UNION ALL verknüpfe.

Abfrage: UNION

Diese Methode, Tabellen zu kombinieren, ohne das Schlüsselwort JOIN zu verwenden, führt zu der folgenden Abfrage:

SELECT 	
    first_name,
    last_name
FROM customer

UNION

SELECT	
    first_name,
    last_name
FROM supplier;

Die erste Anweisung SELECT wählt die Spalten first_name und last_name aus der Tabelle customer. Die zweite Anweisung SELECT macht dasselbe, aber aus der Tabelle supplier. Ich verwende UNION, um die Ergebnisse dieser beiden Abfragen zu verbinden. Es funktioniert: Es gibt zwei Spalten in beiden SELECT Anweisungen, und sie haben denselben Datentyp. Sie sind sogar gleich benannt, obwohl das für das Funktionieren der Abfrage nicht notwendig ist.

Ergebnis: UNION

Wenn Sie die Abfrage ausführen, erhalten Sie dies:

first_namelast_name
AlpaArpad
CinoBilly
JosephineMatijevic
LuisWolf
Jean-ClaudeZaandam
SteveInicks
BillyVan Persie
EminaArkayeva
MirandaFanucci
BoMilosz
JimmyHellas
FrancoisJambony
RosaSparks
KatrinVerson
JanWrangler
BernardineSane
HeinrichStroopwafel
ElviraSamson
RenataTraviata
JimmyTulp
WilmaJackson
ArpadPolanski
BertRandrussell
DesPaulmond
FlintWestwood
CarmenNaburana
HerringoStarr

Wie ich bereits erwähnt habe, handelt es sich um eine Kombination aller Daten aus beiden Tabellen.

Lassen Sie uns nach Duplikaten suchen. Ich habe erwähnt, dass Steve Inicks sowohl in customer und supplier Tabellen. Im Abfrageergebnis finden Sie ihn nur einmal. Ich habe die Zeile markiert, in der er sich befindet.

Schauen wir uns an, wie sich dies von UNION ALL unterscheidet.

Abfrage: UNION ALL

Die Abfrage lautet in diesem Fall:

SELECT
    first_name,
    last_name
FROM customer

UNION ALL

SELECT
    first_name,
    last_name
FROM supplier;

Wie Sie sehen können, ist der Unterschied nicht sehr groß. Es ist sogar die gleiche Abfrage, nur dass sie UNION ALL statt UNION enthält.

Die Ergebnisse sind jedoch unterschiedlich. Schauen wir es uns an.

Ergebnis: UNION ALL

Das Ergebnis der Abfrage ist:

first_namelast_name
JimmyHellas
FrancoisJambony
RenataTraviata
CarmenNaburana
SteveInicks
ElviraSamson
AlpaCino
RosaSparks
BernardineSane
BertRandrussell
ArpadPolanski
BillyVan Persie
SteveInicks
Jean-ClaudeZaandam
EminaArkayeva
BoMilosz
JanWrangler
HeinrichStroopwafel
HerringoStarr
JosephineMatijevic
AlpaCino
FlintWestwood
DesPaulmond
WilmaJackson
KatrinVerson
BertRandrussell
CarmenNaburana
JimmyTulp
LuisWolf
MirandaFanucci

Da Steve Inicks sowohl als Kunde als auch als Lieferant auftritt, wollen wir prüfen, wie oft er im Ergebnis auftaucht. Er taucht zweimal auf, beide Male in blau markiert. Ich habe auch drei weitere Personen markiert, die zweimal vorkommen: Alpa Cino, Bert Randrussell und Carmen Naburana.

Hier ist ein weiteres Beispiel für die Verwendung von UNION und UNION ALL.

Ja, Tabellen können ohne das Schlüsselwort JOIN verbunden werden

Wie Sie gerade gesehen haben, ist es nicht immer notwendig, das Schlüsselwort JOIN zu verwenden, um zwei Tabellen in SQL zu verbinden.

Sie können es durch ein Komma in der FROM Klausel ersetzen und dann Ihre Verknüpfungsbedingung in der WHERE Klausel angeben.

Die andere Methode ist, zwei SELECT Anweisungen zu schreiben. Das Ergebnis jeder Anweisung ist eine Tabelle, also verwenden Sie einfach UNION oder UNION ALL, um die beiden zu kombinieren. Beachten Sie, dass dies nur funktioniert, wenn Ihre SELECT Anweisungen die gleiche Anzahl von Spalten und die gleichen Datentypen haben.

Verwenden Sie UNION, wenn Sie keine Duplikate anzeigen möchten, und UNION ALL, wenn Sie Duplikate anzeigen möchten.

Lernen Sie alle möglichen Arten der Tabellenverknüpfung in SQL

Je mehr Möglichkeiten Sie kennen, wie Sie Tabellen in SQL verbinden können, desto besser. Mit diesen beiden Methoden und dem JOIN wird das Verbinden von Tabellen einfacher. Ihre Abfrageergebnisse sind näher an dem, was Sie brauchen, und Sie können mehr aus SQL herausholen.

Wenn Sie verschiedene Möglichkeiten der Tabellenverknüpfung kennen, können Sie auch Ihren Code ein wenig auflockern. Es kann langweilig sein, alles immer auf die gleiche Weise zu schreiben. Aber am wichtigsten ist, dass jede der drei Methoden in verschiedenen Situationen nützlich ist.

In unserem KursSQL für Anfänger können Sie all diese Methoden zum Verbinden von Tabellen lernen. Dies ist nur ein erster Schritt zur Beherrschung von SQL von A bis Z. Sie brauchen auch viel Übung, um das Verbinden von Tabellen zu beherrschen. Vielleicht ist es am besten, wenn Sie mindestens eine der zehn Online-Optionen aus unserer Liste auswählen.