Direkt zum Inhalt

Einführung in SQL Joins

In diesem Tutorium lernst du die Funktionsweise von Joins in SQL und ihre verschiedenen Typen kennen.
Aktualisierte 16. Jan. 2025  · 9 Min. Lesezeit

Bei deiner Datenanalyse in SQL musst du oft mehrere Tabellen betrachten und sie verbinden, um die gewünschten Ergebnisse zu erhalten. Das Verbinden von Tabellen zur Datenanalyse ist ebenfalls eine notwendige Fähigkeit für einen Datenwissenschaftler. In diesem Lernprogramm lernst du verschiedene Arten von Joins kennen, die du in PostgreSQL durchführen kannst. Du wirst zunächst die grundlegenden Konzepte von Joins in SQL kennenlernen und dann die verschiedenen Arten von Joins und ihre Syntax in PostgreSQL. Zum Abschluss dieses Lernprogramms führst du verschiedene Arten von Join-Abfragen mit zwei Tabellen durch. Um dem Kurs folgen zu können, solltest du mit den Grundlagen von SQL vertraut sein und wissen, wie man einfache Abfragen in PostgreSQL schreibt. Wenn du nach Ressourcen suchst, um diese zu lernen, können die folgenden nützlich sein -

Fangen wir an.

Einrichten der Datenbankumgebung in PostgreSQL

Bevor du dich mit den Grundlagen von SQL-Joins beschäftigst, solltest du einige Tabellen für deine Analysen erstellen. Du brauchst mindestens zwei Tabellen, die mindestens eine Spalte gemeinsam haben. Obwohl du Self-Join-Abfragen auf derselben Tabelle ausführen kannst, lassen wir diese Tatsache vorerst außer Acht.

Du kannst alle SQL-Operationen mit einem Tool namens pgAdmin durchführen, das normalerweise mit der Installation von PostgreSQL mitgeliefert wird. Öffne pgAdmin und erstelle eine Datenbank (gib ihr einen Namen deiner Wahl), um die Tabellen zu erstellen, wenn du keine bestehende Datenbank hast, mit der du fortfahren kannst. Du kannst dann die folgenden zwei Tabellen mit den angegebenen Spezifikationen erstellen -

  • student_name (id, name)
  • student_stream (id, stream)

Beachte, dass die beiden Tabellen die Spalte id gemeinsam haben. Du kannst die folgenden CREATE Anweisungen verwenden, um die Tabellen zu erstellen -

  • Für schüler_name -
    CREATE TABLE student_name
    (
    id smallint,
    name "char"[]
    );
    
  • For student_stream -
    CREATE TABLE student_stream
    (
    id smallint,
    stream "char"[]
    );
    

Fügen wir nun einige Datensätze in die Tabellen ein.

  • Für schüler_name -
INSERT INTO student_name(id, name) VALUES (1, 'Sayak');

INSERT INTO student_name(id, name) VALUES (2, 'Alex');

INSERT INTO student_name(id, name) VALUES (3, 'Sameer');

INSERT INTO student_name(id, name) VALUES (4, 'Rick');
  • For student_stream -
INSERT INTO student_stream(id, stream) VALUES (1, 'CS');

INSERT INTO student_stream(id, stream) VALUES (1, 'IT');

INSERT INTO student_stream(id, stream) VALUES (2, 'ECE');

INSERT INTO student_stream(id, stream) VALUES (9, 'ECE');

Die Einträge in der Tabelle sollten wie folgt aussehen, wenn du die obigen Abfragen ohne Änderungen ausgeführt hast -

Tabellen student_name und student_stream

Jetzt hast du zwei einfache Tabellen fertig. Jetzt wollen wir uns mit den Grundlagen von SQL-Joins beschäftigen.

SQL Joins - Grundlagen

Mit SQL Joins kannst du zwei oder mehr Tabellen (manchmal auch nur eine Tabelle) mit gemeinsamen Bezeichnern zusammenfassen. Nehmen wir das Beispiel der beiden Tabellen, die du oben erstellt hast - beide Tabellen haben die Spalte id gemeinsam. Du fragst dich vielleicht, warum das Join in SQL notwendig ist. Lass uns das kurz besprechen.

Aufgrund von Normalisierungsbeschränkungen kann es vorkommen, dass nicht alle erforderlichen Informationen in einer einzigen Tabelle vorhanden sind. Eine Normalisierung ist nicht nur erwünscht, sondern auch notwendig, um die Konsistenz zu wahren, Redundanzen zu reduzieren und mehrere Einfügungen und Aktualisierungsanomalien zu verhindern. Betrachte noch einmal die beiden obigen Tabellen. Angenommen, du möchtest herausfinden, in welchen Fächern Sayak eingeschrieben ist. Um die Antwort auf diese Frage zu erhalten, musst du die beiden Tabellen verbinden (es können auch Unterabfragen verwendet werden, aber das lassen wir jetzt mal außen vor) und dann entsprechend vorgehen.

Damit zwei Tabellen verbunden werden können, müssen sie etwas gemeinsam haben. Heißt das, dass beide Tabellen mindestens eine Spalte mit demselben Namen haben müssen? Oder was genau ist dieser Zustand?

Die Tabellen, die du zusammenführen möchtest, müssen nicht unbedingt eine Spalte mit demselben Namen haben, aber logisch gesehen sollten sie gleich sein, d.h. ihre Datentypen sollten übereinstimmen. Du kannst nicht zwei Tabellen verbinden, die eine Spalte mit demselben Namen, aber unterschiedlichen Datentypen haben. Schauen wir uns nun die verschiedenen Arten von SQL-Joins an.

Verschiedene Arten von SQL-Joins

In diesem Abschnitt wirst du verschiedene Arten von SQL-Joins kennenlernen.

  • INNER JOIN
    • Selbstverknüpfung
  • OUTER JOIN
    • LEFT JOIN
    • RIGHT JOIN
    • FULL JOIN
  • CROSS JOIN
  • Semi-Join und Anti-Join

PostgreSQL bietet separate Schlüsselwörter für die in Großbuchstaben genannten Arten von Joins. Schauen wir sie uns nacheinander an. Dazu wirst du die Joins zunächst visuell untersuchen und dann die entsprechenden Join-Abfragen in PostgreSQL ausführen.

INNER JOIN

Sieh dir das folgende Diagramm an, um INNER JOIN visuell zu verstehen -

Inner Join Diagramm

Im obigen Beispiel ist die betrachtete Spalte die Spalte id. INNER JOIN ignoriert alle anderen Spalten, deren Werte nicht in beiden Tabellen gleich sind. Führen wir nun eine Abfrage in PostgreSQL aus, die INNER JOIN zwischen den beiden Tabellen - student_name und student_stream - durchführt.

Wenn du die folgende Abfrage ausführst, erhältst du das Ergebnis wie in der obigen Abbildung dargestellt -

SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
INNER JOIN student_stream AS s2
ON s1.id = s2.id;

s1 und s2 sind die Aliasnamen für die beiden Tabellen. Du hast das Stichwort ON zusammen mit INNER JOIN verwendet. Die Abfrage kann auch mit dem Schlüsselwort USING ausgeführt werden -

SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
INNER JOIN student_stream AS s2
USING (id);

Self Join ermöglicht es dir, dieselbe Tabelle zu verbinden. Aber wo könnte das eine gute Option sein? Angenommen, du hast eine Tabelle mit den folgenden Spalten -

  • Land
  • Kontinent

Jetzt willst du zwei Länder so einbinden, dass ihre Kontinente gleich groß sind. Die folgende Abbildung soll dir einen Eindruck von den zu erwartenden Ergebnissen geben -

Self-Join-Ergebnis (Tabellenform)

OUTER JOIN

OUTER JOIN können weiter in drei Arten unterteilt werden -

LEFT JOIN oder Left Outer JOIN: Das folgende Diagramm gibt dir einen guten Überblick über LEFT JOIN in SQL -

Diagramm der linken Verknüpfung in SQL

Beachte, dass LEFT JOIN im Gegensatz zu INNER JOIN die Datensätze aus der linken Tabelle (in der Reihenfolge, die du in deiner Abfrage angibst) abruft, für die es in der rechten Tabelle keinen passenden Eintrag gab. Das wiederum sagt dir, dass Sameer und Rick in keinem der Streams eingeschrieben sind. Die entsprechende Abfrage dazu lautet -

SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
LEFT JOIN student_stream AS s2
ON s1.id = s2.id;

RIGHT JOIN oder Right Outer JOIN : RIGHT JOIN ist genau das Gegenteil von LEFT JOIN -

Diagramm der rechten Verknüpfung in SQL

RIGHT JOIN kann dir helfen, den/die Studiengang/e zu finden, für den/die sich kein Schüler eingeschrieben hat. Die Abfrage hierfür wäre -

SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
RIGHT JOIN student_stream AS s2
ON s1.id = s2.id;

FULL JOIN oder Full Outer JOIN: Mit FULL JOIN kannst du sowohl LEFT JOIN als auch RIGHT JOIN in einer einzigen Zusammenstellung kombinieren -

Diagramm des Full Join in SQL

Die entsprechende Abfrage würde lauten -

SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
FULL JOIN student_stream AS s2
ON s1.id = s2.id;

Beachte, dass du alle oben genannten OUTER JOIN Abfragen mit dem Schlüsselwort USING ausführen kannst. Schauen wir uns nun CROSS JOIN an.

CROSS JOIN

CROSS JOIN ist im Wesentlichen das kartesische Produkt zwischen zwei Elementen, ausgedrückt mit SQL. Angenommen, du möchtest alle möglichen Kombinationen zwischen zwei Tabellen oder sogar in einer einzigen Tabelle haben. Hierfür brauchst du CROSS JOIN. Die folgende Abbildung stellt dieses Konzept visuell dar -

Diagramm der Querverbindung

Du hast bereits zwei Tabellen, um das auszuprobieren. Um alle möglichen Kombinationen zwischen den id Spalten der Tabellen student_name und student_stream zu erhalten, kannst du die folgende Abfrage ausführen -

SELECT s1.id, s2.id
FROM student_name AS s1
CROSS JOIN student_stream AS s2;

Und du bekommst das folgende Ergebnis -

Tabelle mit allen möglichen Kombinationen

Sehen wir uns nun die beiden anderen Join-Typen an, für die PostgreSQL keine direkten Schlüsselwörter bereitstellt.

Semi-Join und Anti-Join

Schauen wir uns die Tabellen an, die du zuvor im Tutorial erstellt hast:

Original Tabelle

Semi Join Abfragen werden in der Regel in Form von Unterabfragen ausgeführt, bei denen Zeilen aus der ersten Tabelle in Bezug auf eine Bedingung (oder eine Reihe von Bedingungen), die in der zweiten Tabelle erfüllt ist, abgefragt werden. Nehmen wir an, die linke Tabelle ist die erste Tabelle und die rechte Tabelle ist die zweite Tabelle.

Anti Join Abfragen sind das genaue Gegenteil. In Anti Join werden Zeilen aus der ersten Tabelle in Bezug auf eine Bedingung (oder eine Reihe von Bedingungen) ausgewählt, die in der zweiten Tabelle nicht erfüllt ist. Hier ist ein Diagramm, damit du das visuell verstehen kannst -

Semi- und Anti-Join-Diagramme

Die Abfrage für die Realisierung der Semi Join würde lauten -

select id, name
from student_name
where id IN
(select id from student_stream where stream
IN ('CS', 'IT', 'ECE'));

Ähnlich wäre die Abfrage, die Anti Join realisiert, in diesem Fall -

select id, name
from student_name
where id NOT IN
(select id from student_stream where stream
IN ('CS', 'IT', 'ECE'));

Beachte die Verwendung von NOT in der obigen Abfrage.

Die nächste Stufe der SQL-Join-Kunst

Das ist alles für dieses Tutorial. Du hast in diesem Tutorial verschiedene Arten von SQL-Joins kennengelernt und dich auch mit der PostgreSQL-Syntax vertraut gemacht. Wenn du einige anspruchsvolle SQL-Join-Übungen machen willst, solltest du den DataCamp-Kurs Joining Data in SQL besuchen. Tatsächlich wurden die Materialien aus dem Kurs als Referenzen für dieses Tutorial verwendet.

Lass mich deine Fragen im Comments Abschnitt wissen.

Themen

Kurse in SQL

Zertifizierung verfügbar

Kurs

Daten in SQL verknüpfen

4 hr
192.6K
Erweitere deine SQL-Kenntnisse und lerne, Tabellen miteinander zu verbinden, die relationale Mengenlehre anzuwenden und mit Unterabfragen zu arbeiten.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Lehrer/innen und Schüler/innen erhalten das Premium DataCamp kostenlos für ihre gesamte akademische Laufbahn

Keine Hacks, keine Tricks. Schüler/innen und Lehrer/innen, lest weiter, um zu erfahren, wie ihr die Datenerziehung, die euch zusteht, kostenlos bekommen könnt.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

4 Min.

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Mehr anzeigenMehr anzeigen