Zurück zur Artikelliste Artikel
11 Leseminuten

SQL JOIN-Tipps für Einsteiger

Wenn Sie ein Anfänger sind und wissen möchten, wie Sie SQL-JOINs in Ihren Abfragen verwenden können, sind Sie hier genau richtig.

Die Verwendung der SQL JOIN Klausel ist notwendig, wenn Sie mehrere Tabellen abfragen wollen. Früher oder später werden Sie mehr als eine Tabelle in einer Abfrage verwenden müssen. Das liegt in der Natur relationaler Datenbanken im Allgemeinen - sie bestehen aus Daten, die in der Regel in mehreren Tabellen gespeichert sind; diese wiederum bilden eine Datenbank. Sobald Sie sich mit den grundlegenden SQL-Abfragen vertraut gemacht haben, ist es ratsam, sich mit der JOIN Klausel vertraut zu machen. Neben den Tipps aus diesem Artikel kann Ihnen unser SQL-JOINs Kurs dabei helfen.

In diesem Artikel werde ich Ihnen vier Tipps zur Verwendung der JOIN Klausel geben. Doch zunächst möchte ich Ihnen die Tabellen zeigen, mit denen wir arbeiten werden.

Lernen Sie die Tabellen kennen

Um Ihnen bei der Verwendung von JOINs zu helfen, werde ich drei Tabellen verwenden:

  • manufacturer
  • product_type
  • product

Die Tabelle manufacturer enthält die folgenden Attribute:

Die Tabelle manufacturer enthält die folgenden Attribute:

  • id - Die ID-Nummer des Herstellers in der Datenbank.
  • manufacturer_name - Der Name des Herstellers.

Die zweite Tabelle ist product_type, die die folgenden Attribute enthält:

  • id - Die ID des Produkttyps.
  • type_name - Der Name des Produkttyps.

Die letzte Tabelle ist die Produkttabelle, die vier Attribute hat:

  • id - Die ID des Produkts.
  • product_name - Der Name des Produkts.
  • type - Der Typ des Produkts; verweist auf die Tabelle
  • manufactured_by - Der Name des Produktherstellers; verweist auf die Tabelle

Es ist Zeit für den ersten Tipp!

Tipp Nr. 1: Explizite JOIN-Syntax verwenden

Sie fragen sich wahrscheinlich, was das überhaupt bedeutet! Keine Sorge, das wird Ihnen gleich klar werden.

Wie Sie wissen, wird die JOIN Klausel verwendet, um Daten aus zwei oder mehr Tabellen zu kombinieren oder zu verbinden. Dies ist jedoch nicht die einzige Möglichkeit, Tabellen zu verbinden. Es gibt auch eine alte Syntax - aus der Zeit vor SQL-92 - in der Tabellen durch Auflistung in der FROM Klausel verbunden werden. Diese Syntax wird von vielen Anfängern verwendet, was in Ordnung ist und genau die gleiche Aufgabe erfüllt wie eine explizite JOIN-Syntax. Aber das Erlernen der expliziten JOIN-Syntax zahlt sich auf lange Sicht aus. Sie hat mehrere Vorteile gegenüber der Auflistung von Tabellen in der FROM Klausel, auf die ich später in diesem Artikel eingehen werde.

Ich werde Ihnen zeigen, wie nicht-explizite Tabellen-Joins funktionieren. Nehmen wir an, Sie möchten eine Liste von Produkten zusammen mit ihren Herstellernamen erhalten. So geht es, indem Sie zwei Tabellen in der FROM -Klausel auflisten:

SELECT	product.id,
		product.product_name,
		manufacturer.manufacturer_name
FROM product, manufacturer
WHERE product.manufactured_by = manufacturer.id;

Ich habe zunächst die Spalten aufgelistet, die ich im Ergebnis haben möchte. Es handelt sich um id und product_name aus der Tabelle product und manufacturer_name aus der Tabelle manufacturer. Dann habe ich sowohl die product und die manufacturer Tabelle in der FROM Klausel aufgeführt. Schließlich habe ich angegeben, dass die Spalte manufactured_by aus der Tabelle product gleich der Spalte id aus der Tabelle manufacturer.

Das Ergebnis?

idproduct_namemanufacturer_name
1SuperFXQuazySoftware
2UnterBDieBeste
3HyperXYZFabricaInfinita
4TurboRayQuazySoftware
5VeryTradeDieBeste
6BlueSkyFabricaInfinita
7DirtyGrittyQuazySoftware
8SmoothUndertakerDieBeste
9HelioTrollFabricaInfinita

Sie erhalten dasselbe Ergebnis, wenn Sie die Anweisung JOIN verwenden:

SELECT	product.id,
		product.product_name,
		manufacturer.manufacturer_name
FROM product JOIN manufacturer 
ON product.manufactured_by = manufacturer.id;

Der Teil SELECT ist in beiden Abfragen derselbe. Aber anstatt einfach zwei Tabellen in der FROM Klausel aufzulisten, habe ich sie verbunden, indem ich explizit die JOIN Klausel geschrieben habe. Wenn Sie diese Klausel schreiben, müssen Sie angeben, welche Spalten beim Verbinden der beiden Tabellen verwendet werden sollen. Dazu verwenden Sie die Klausel ON und verbinden die Spalte manufactured_by aus der Tabelle product mit der Spalte id aus der Tabelle manufacturer. Wenn Sie genauer hinsehen, werden Sie feststellen, dass die ON Klausel wie die WHERE Klausel in der vorherigen Abfrage funktioniert.

Warum empfehle ich die Verwendung einer expliziten JOIN -Anweisung? Erstens können Sie auf diese Weise leicht erkennen, welche Art von Join für die Kombination der Tabellen verwendet wird. Es gibt vier Arten von Verknüpfungen (innerer Join, linker Join, rechter Join und vollständiger Join), auf die ich später noch eingehen werde. Wenn die Art der Verknüpfung in der Abfrage explizit angegeben ist, ist es einfacher zu verstehen, was die Abfrage tut.

Der andere Grund für die Verwendung der expliziten JOIN -Syntax besteht darin, dass der Unterschied zwischen den Join-Bedingungen und den Filterbedingungen deutlich wird. Da die WHERE Klausel zum Filtern von Daten verwendet wird, kann es verwirrend sein, sie zum Verknüpfen von Tabellen zu verwenden.

Es gibt noch weitere Vorteile der Verwendung von expliziten JOINs, auf die ich an dieser Stelle nicht eingehen kann; weitere Einzelheiten finden Sie in diesem Artikel, der die Vorteile von SQL-JOINs behandelt.

Wenn Sie Ihre grundlegenden SQL-Kenntnisse auffrischen müssen, bevor Sie weitermachen, könnte unser SQL für Anfänger Kurs ideal dafür sein. Sie können auch den Abschnitt JOIN verwenden, um zu lernen, wie man Tabellen verknüpft.

Tipp #2: Verwenden Sie Tabellenalias

Um Ihnen zu zeigen, was ich mit den Aliasen meine und warum sie nützlich sind, möchte ich Ihnen zeigen, wie eine Abfrage ohne sie aussieht. Wenn ich alle Produkte und die Namen ihrer Produkttypen auflisten möchte, ist das eine Möglichkeit, dies zu tun:

SELECT	product.id,
		product.product_name,
		product_type.type_name
FROM product 
JOIN product_type 
ON product.type = product_type.id;

Zunächst die Erklärung der Abfrage. Wie das vorherige Beispiel wählt diese Abfrage die Spalten id und product_name aus der Tabelle product. Sie wählt auch die Spalte type_name aus der Tabelle product_type. Die Tabellen product und product_type werden über den Spaltentyp der Tabelle product und die Spalte id aus der Tabelle product_type.

Hier ist das Ergebnis:

idproduct_nametype_name
1SuperFXServer
2UnterBServer
3HyperXYZServer
4TurboRayLaptop
5VeryTradeLaptop
6BlueSkyLaptop
7DirtyGrittySoftware
8SmoothUndertakerSoftware
9HelioTrollSoftware

Auch wenn diese Abfrage nicht kompliziert ist, so ist sie doch umständlich zu schreiben. Jedes Mal, wenn ich auf die Tabelle verweisen möchte, muss ich ihren vollständigen Namen eingeben. Als ob das nicht genug wäre, gibt es auch noch eine Tabelle, deren Name aus zwei Wörtern und einem Unterstrich besteht. Stellen Sie sich vor, es gäbe mehr Tabellen mit längeren Namen! Es gibt jedoch eine Möglichkeit, Ihnen das Leben leichter zu machen. Anstatt die vollständigen Namen der Tabellen zu schreiben, können Sie jeder Tabelle einen Alias zuweisen:

SELECT	p.id,
		p.product_name,
		pt.type_name
FROM product p 
JOIN product_type pt 
ON p.type = pt.id;

Dies ist genau die gleiche Abfrage wie oben, aber sie verwendet Tabellen-Aliase anstelle der vollständigen Namen. Schauen Sie sich das an! Ich habe die Aliasnamen in den FROM- und JOIN -Klauseln zugewiesen. Sie werden den Unterschied bemerken; die Tabelle product heißt jetzt pund die Tabelle product_type heißt jetzt pt. Da sich die Namen der Tabellen geändert haben, müssen diese neuen Namen natürlich auch bei der Auswahl der Spalten id, product_name und type_name verwendet werden.

Ich finde, die Abfrage sieht jetzt viel besser aus. Und es war auch viel angenehmer, sie zu schreiben! Noch ein Ratschlag: Verwenden Sie aussagekräftige Aliasnamen! In der Regel werden die ersten ein oder zwei Buchstaben des Tabellennamens oder der erste Buchstabe jedes Wortes im Tabellennamen verwendet. Der Punkt ist, dass Ihr Alias so kurz wie möglich sein sollte, aber es sollte sich auch wie eine "natürliche" Wahl für einen Alias anfühlen; Sie sollten in der Lage sein, sofort zu wissen, welcher Alias sich auf welche Tabelle bezieht.

Tipp Nr. 3: Kennen Sie den Unterschied zwischen verschiedenen JOIN-Typen

Ich habe bereits erwähnt, dass es vier grundlegende JOIN Typen gibt:

  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • FULL OUTER JOIN

Die INNER JOIN Klausel gibt nur übereinstimmende Datensätze zurück, die in beiden Tabellen identisch sind. Beachten Sie, dass INNER JOIN dasselbe ist wie JOIN.

Die LEFT JOIN gibt alle Datensätze aus der linken Tabelle (der ersten Tabelle, die nach FROM steht) und nur die passenden Datensätze aus der rechten Tabelle (der zweiten Tabelle, die nach JOIN steht) zurück.

Dagegen gibt RIGHT JOIN alle Datensätze aus der rechten Tabelle und nur die passenden Datensätze aus der linken Tabelle zurück.

FULL OUTER JOIN schließlich gibt alle Datensätze aus beiden Tabellen zurück. Alle nicht übereinstimmenden Datensätze werden mit NULL gefüllt. Diese Verknüpfung liefert potenziell eine riesige Menge an Daten. Beachten Sie, dass FULL OUTER JOIN dasselbe ist wie FULL JOIN.

Eine ausführlichere, aber anfängerfreundliche Erklärung finden Sie in diesem Artikel über SQL JOIN-Typen.

Ich weiß, dass es schwer sein kann, sich alles zu merken, vor allem, wenn Sie Anfänger sind oder Joins nicht sehr oft verwenden. Aber Sie brauchen sich nicht alles zu merken, denn es gibt den SQL JOIN-Spickzettel. Sie können ihn speichern oder ausdrucken und ihn immer dann verwenden, wenn Sie die JOIN Klausel verwenden oder etwas Neues auf einen Blick lernen wollen.

In der Praxis werden Sie am häufigsten die Klauseln INNER JOIN und LEFT JOIN verwenden, also konzentrieren wir uns auf diese beiden. In den vorangegangenen Beispielen haben Sie gesehen, wie Sie INNER JOIN verwenden können. Ich möchte Ihnen nun zeigen, wie LEFT JOIN funktioniert.

In diesem Beispiel listen wir alle Produkttypen und die zu jeder Kategorie gehörenden Produkte auf. Sie könnten es auch so machen:

SELECT	pt.id,
		pt.type_name,
		p.product_name
FROM product_type pt 
LEFT JOIN product p 
ON pt.id = p.type;

Diese Abfrage wählt zunächst die gewünschten Spalten aus; hier gibt es nichts Neues. Dann verbindet sie die beiden Tabellen und weist ihnen Aliasnamen zu. Ich habe die Tabelle mit etwas Neuem verknüpft: der Anweisung LEFT JOIN. Nur zur Erinnerung: Diese Verknüpfung wählt alle Zeilen aus der linken Tabelle (product_type) und die passenden Zeilen aus der rechten Tabelle (product). Das ist genau das, was ich brauchte; sehen Sie sich das an:

idtype_nameproduct_name
1SoftwareDirtyGritty
1SoftwareSmoothUndertaker
1SoftwareHelioTroll
2LaptopTurboRay
2LaptopVeryTrade
2LaptopBlueSky
3ServerSuperFX
3ServerUnterB
3ServerHyperXYZ
4ScooterNULL
5PrinterNULL

Beachten Sie, dass es keine Produkte für die Kategorien "Scooter" und "Drucker" gibt. Wenn es keine passenden Zeilen in der richtigen Tabelle gibt, lautet das Ergebnis NULL.

Tipp Nr. 4: Planen Sie mehrere Verknüpfungen

Sie sind nicht darauf beschränkt, nur zwei Tabellen zu verknüpfen; Sie können auch drei oder mehr Tabellen verknüpfen. Ich zeige Ihnen zunächst, wie das geht, und gebe Ihnen dann ein paar hilfreiche Tipps.

Ihre Aufgabe ist es, alle Produkte zusammen mit ihrem Produkttyp und dem Herstellernamen aufzulisten. Dieser Code wird das tun:

SELECT	p.id,
		p.product_name,
		pt.type_name,
		m.manufacturer_name
FROM product p 
JOIN product_type pt
	ON p.type = pt.id 
JOIN manufacturer m 
	ON p.manufactured_by = m.id;

Wie in den vorherigen Beispielen wählt dieser Code zunächst die Spalten aus, die im Ergebnis angezeigt werden sollen. Die Tabelle product wird verbunden mit der Tabelle product_typeverbunden; das haben Sie bereits geübt. OK, aber jetzt brauchen Sie Daten aus der Tabelle manufacturer; wie verknüpfen Sie sie? Sie schreiben einfach eine weitere JOIN Klausel und geben die gewünschte Tabelle an.

Aber auch wenn der Join nach der Tabelle kommt product_typesteht, bedeutet das nicht, dass die Tabelle manufacturer mit dieser Tabelle verbunden ist, zumindest in diesem Fall. Nein, sie wird mit der Tabelle product. Das geht aus den von mir angegebenen Spalten hervor; die Tabellen sind über die Spalten manufactured_by aus der Tabelle product und id aus manufacturer.

Hier ist das Ergebnis:

idproduct_nametype_namemanufacturer_name
1SuperFXServerQuazySoftware
2UnterBServerDieBeste
3HyperXYZServerFabricaInfinita
4TurboRayLaptopQuazySoftware
5VeryTradeLaptopDieBeste
6BlueSkyLaptopFabricaInfinita
7DirtyGrittySoftwareQuazySoftware
8SmoothUndertakerSoftwareDieBeste
9HelioTrollSoftwareFabricaInfinita

Wenn Sie mehrere Tabellen verknüpfen, ist es eine gute Idee, die Tabellen, die Sie verknüpfen wollen, in einem Plan darzustellen. Fertigen Sie eine kleine Zeichnung an; auf diese Weise lassen sich die Verknüpfungen leichter visualisieren. Dies ist besonders praktisch, wenn Sie eine linke oder rechte Verknüpfung vornehmen. Die Tabelle, die Sie auf der linken Seite zeichnen, ist Ihre linke Tabelle, und LEFT JOIN wird Ihnen alle Daten daraus liefern. Die Tabelle, die Sie auf der rechten Seite zeichnen, ist die rechte Tabelle. Es scheint offensichtlich zu sein, aber es ist schwieriger, es sich vorzustellen, ohne zu zeichnen, besonders wenn man Anfänger ist. Die Zeichnung könnte etwas so Einfaches sein wie das hier:

Zeichnen von

Ein weiterer Tipp ist, die Spalten in der SELECT-Anweisung in der gleichen Reihenfolge aufzulisten, in der Sie die Tabellen verbinden. Wenn Sie sich die obige Abfrage ansehen, sind die Spalten aus den Tabellen product, product_type, und manufacturerjeweils. Die Tabellen werden in genau der gleichen Reihenfolge verknüpft. Auf diese Weise wird Ihr Code lesbarer und leichter zu ändern.

Zu guter Letzt sollten Sie Tabellen immer in einer Art Kette verbinden. Mit anderen Worten: Jede Tabelle, die Sie verknüpfen, sollte mit der/den Tabelle(n) verknüpft werden, die bereits in Ihrer Abfrage verknüpft sind. Wenn Sie zwei Tabellen verknüpfen und dann beschließen, eine weitere Tabelle zu verknüpfen, darf die dritte Tabelle nicht "lose", d. h. ohne Verbindung zu den vorhergehenden Tabellen, zurückbleiben. Stellen Sie sicher, dass die ON Bedingungen die neue Tabelle mit den zuvor verknüpften Tabellen verbinden. Hier sehen Sie, wie man es NICHT machen sollte:

Zeichnen von

Sie haben eine ganze Menge gelernt. Das ist natürlich nicht alles, was Sie über die Verknüpfung von drei Tabellen wissen müssen. Es gibt Details, die ich nicht erwähnt habe und die in diesem Artikel über Multi-Table-Joins sehr gut erklärt werden. Und jetzt, wo Sie über LEFT JOIN und das Verbinden mehrerer Tabellen Bescheid wissen, warum lernen Sie nicht, wie man mehrere Tabellen LEFT JOIN verbindet?

War es möglich, dies zu lernen?

Mit diesen Tipps zur Verwendung von Joins in SQL habe ich versucht, Ihnen die ersten Schritte so einfach wie möglich zu machen. Sie haben gelernt, wie man zwei Tabellen sowohl mit der expliziten JOIN Syntax als auch mit der Auflistung von Tabellen in der FROM Klausel verbindet. Außerdem haben Sie gelernt, wie man Aliase verwendet und was verschiedene Joins bewirken. Schließlich habe ich Ihnen gezeigt, wie Sie drei Tabellen verbinden können. Ich denke, das ist ein großer Schritt für Sie in recht kurzer Zeit. Herzlichen Glückwunsch!

Wie können Sie nun all diese Tipps in die Praxis umsetzen? Dieser Artikel über das Üben von SQL-JOINs wird Ihnen helfen, den für Sie am besten geeigneten Ansatz zu finden. Oder Sie üben mit unserem SQL für Anfänger oder SQL-JOINs üben. Es hängt davon ab, wie detailliert Sie Ihr Wissen vertiefen wollen.

Möchten Sie uns Ihre Erfahrungen mit der Verknüpfung von Tabellen mitteilen? Der Kommentarbereich wartet auf Sie!