Heute kommen wir zu einem der spannendsten Themen beim Arbeiten mit relationalen Datenbanken – das Zusammenführen von Daten aus mehreren Tabellen mit JOIN. Das ist ein mächtiges Tool, das dir die Tür zu komplexen Beziehungen und Analysen öffnet.
Stell dir vor, deine Datenbank ist ein riesiger Comic, in dem jede einzelne Tabelle ein eigenes Panel ist. Um die ganze Story zu bekommen, musst du diese Panels verbinden. Genau dabei hilft dir JOIN. Daten verbinden heißt, dass eine Abfrage Infos aus mehreren Tabellen holt und sie anhand bestimmter Bedingungen zusammenbringt.
Relationale Datenbanken basieren auf dem Konzept von Beziehungen zwischen Tabellen. Jede Tabelle speichert Infos über eine bestimmte Entität, und für ein vollständiges Bild wollen wir oft Daten aus verschiedenen Tabellen verbinden. Zum Beispiel:
- Die Tabelle
studentsenthält eine Liste von Studierenden. - Die Tabelle
coursesspeichert eine Liste von Kursen. - Die Tabelle
enrollmentszeigt, wer welche Kurse besucht.
Um herauszufinden, welcher Student in welchem Kurs ist, müssen wir diese Tabellen verbinden. Bei Bewerbungsgesprächen wirkt ein Entwickler, der mit JOIN umgehen kann, direkt viel professioneller – das ist einer der gefragtesten Skills im Datenbereich.
Die wichtigsten Join-Arten
In PostgreSQL gibt es verschiedene Arten von JOIN, und jede ist für bestimmte Aufgaben gedacht. Wir schauen sie uns erstmal allgemein an, damit du nicht gleich mit komplizierten Beispielen überfordert bist:
Typ JOIN |
Beschreibung |
|---|---|
INNER JOIN |
Gibt Zeilen zurück, die in beiden Tabellen übereinstimmen. |
LEFT JOIN |
Gibt alle Zeilen aus der linken Tabelle zurück, und aus der rechten nur die passenden. |
RIGHT JOIN |
Gibt alle Zeilen aus der rechten Tabelle zurück, und aus der linken nur die passenden. |
FULL OUTER JOIN |
Gibt alle Zeilen aus beiden Tabellen zurück und füllt NULL für fehlende Übereinstimmungen. |
Welche JOIN-Art du nimmst, hängt von deiner Aufgabe ab:
- Wenn du nur die passenden Daten aus beiden Tabellen brauchst, nimm
INNER JOIN. - Wenn du alle Daten aus einer Tabelle behalten willst und aus der anderen nur die passenden, sind
LEFT JOINoderRIGHT JOINdas Richtige. - Wenn du alle Daten aus beiden Tabellen willst, auch wenn sie nicht zusammenpassen, nimm
FULL OUTER JOIN.
Lass uns diese Joins direkt in der Praxis anschauen.
Beispielaufgabe – "Wer ist in welchem Kurs?"
Angenommen, wir haben drei Tabellen:
Tabelle students
| id | name |
|---|---|
| 1 | Otto |
| 2 | Anna |
| 3 | Peter |
Tabelle courses
| id | title |
|---|---|
| 101 | Mathematik |
| 102 | Englisch |
Tabelle enrollments
| student_id | course_id |
|---|---|
| 1 | 101 |
| 2 | 102 |
Diese Tabellen sind so miteinander verbunden:
- Das Feld
idinstudentsist die eindeutige ID des Studenten. - Das Feld
idincoursesist die eindeutige ID des Kurses. - In der Tabelle
enrollmentsverbinden die Spaltenstudent_idundcourse_idStudenten und Kurse.
Angenommen, wir wollen wissen: Welcher Student ist in welchem Kurs eingeschrieben?
Die Antwort bekommen wir mit JOIN. Wir verbinden die Tabellen anhand ihrer Beziehungen:
- Wir verbinden
studentsundenrollmentsüberid = student_id. - Wir verbinden
enrollmentsundcoursesübercourse_id = id.
So sieht die SQL-Abfrage aus:
SELECT students.name, courses.title
FROM enrollments
JOIN students ON enrollments.student_id = students.id
JOIN courses ON enrollments.course_id = courses.id;
Was macht diese Abfrage:
FROM enrollments– wir starten mit der Tabelle, die Studenten und Kurse verbindet.JOIN students ON enrollments.student_id = students.id– wir holen die Studenten dazu, um ihre Namen zu bekommen.JOIN courses ON enrollments.course_id = courses.id– wir holen die Kurse dazu, um die Titel zu bekommen.
Das Ergebnis sieht so aus:
| name | title |
|---|---|
| Otto | Mathematik |
| Anna | Englisch |
Achte darauf: Wenn ein Student keinen Kurs hat, taucht er im Ergebnis nicht auf – weil JOIN standardmäßig streng ist (INNER JOIN). Später schauen wir uns an, wie man mit LEFT JOIN auch solche Studenten einbezieht.
Falls dir bei so einer Abfrage noch was unklar ist – kein Stress! Schritt für Schritt klären wir das in den nächsten Vorlesungen!
Wofür braucht man das im echten Leben?
Jetzt, wo du weißt, wie man Tabellen verbindet, lass uns mal über die echte Welt reden. Hast du dich schon mal gefragt, wie ein Online-Shop funktioniert? Zum Beispiel, wenn du ein Smartphone auswählst und die Bewertungen anderer User siehst.
- Die Tabelle
productsenthält Infos zu Produkten. - Die Tabelle
reviewsenthält Bewertungen von Kunden. - Die Tabelle
customersenthält Infos zu den Kunden selbst.
Um auf der Website die Bewertungen anzuzeigen, muss man die Tabellen products, reviews und customers verbinden. Das ist JOIN in Aktion.
Worauf solltest du achten?
Bevor wir in den nächsten Vorlesungen tiefer in JOIN einsteigen, hier ein paar Dinge, die du dir merken solltest:
- Die Reihenfolge beim
JOINist wichtig. Zum Beispiel gibtLEFT JOINZeilen aus der linken Tabelle zurück – wenn du die Reihenfolge änderst, ändert sich auch das Ergebnis. - Arbeite mit kleinen Tabellen. Am Anfang solltest du keine Abfragen auf Millionen von Zeilen machen. Denk dran: Auch die einfachste Abfrage sollte verständlich sein.
- Gewöhn dich an Beziehungen zu denken. Wenn du Tabellen als Teile einer großen Struktur siehst, wird das Arbeiten mit
JOINganz natürlich.
Ab heute fangen wir an, echte SQL-Pros zu werden. In der nächsten Vorlesung lernst du, wie man INNER JOIN nutzt, um Daten aus zwei Tabellen zu holen. Das wird ein großer Schritt auf deinem Weg mit PostgreSQL.
GO TO FULL VERSION