Kurs
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 -
- Einsteigerhandbuch zu PostgreSQL
- Intro to SQL for Data Science Kurs von DataCamp
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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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:

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 -

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.
