Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Zwei Tabellen mit JOIN verbinden

Nach dieser Lektion: Ich kann zwei Tabellen mit einem JOIN verbinden.

Lektion, 50 Min.13 BefehleMySQL-und-phpMyAdmin-Lab mit Beispieldatenbank eines Shops zum Üben von SQL

Welcher Film läuft um 20:30?

Im Kinoprogramm steht bei jeder Vorstellung nur die Nummer des Films, nicht sein Titel. Der Titel steht in einer zweiten Liste.

Um die Frage zu beantworten, musst du beide Listen verbinden. Genau das tut ein JOIN in einer Datenbank.

Am Ende dieser Lektion

Notiz

Ich kann zwei Tabellen mit einem JOIN verbinden.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Fremdschlüsseleine Spalte mit der Nummer einer Zeile in einer anderen Tabellefilm_id
JOINverbindet Zeilen zweier Tabellen, die zusammengehören
Verbindungsbedingungder Test, der sagt, welche Zeilen zusammengehörenON a.id = b.a_id
LEFT JOINein JOIN, der alle Zeilen der linken Tabelle behält
Aliasein kurzer Name für eine Tabelle in einer Abfragef

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Fremdschlüssel zeigt auf eine andere Tabelle

Der Titel eines Films steht nur einmal in der Tabelle filme. Die Tabelle vorstellungen kopiert ihn nicht, sondern merkt sich die Nummer des Films.

Diese Spalte heißt Fremdschlüssel. Die Datenbank prüft bei jeder neuen Zeile, ob es die Nummer in filme wirklich gibt.

Bevor du anfängst

Notiz

Drück oben in der Leiste auf Lab starten, warte auf beide Dienste und öffne das Terminal. Die zwei ersten Runs richten die Anmeldung ein. Hast du das Lab schon laufen, brauchst du sie nur nach einem Neustart des Terminals.

Das Zertifikat des Servers annehmen

Befehl
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Abkürzung für die Datenbank shop

Befehl
alias sql='mariadb -h db -u student -pstudent shop -t -e'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein JOIN setzt zusammen, was zusammengehört

Hinter JOIN steht die zweite Tabelle, hinter ON die Verbindungsbedingung: Der Fremdschlüssel einer Seite ist gleich dem Schlüssel der anderen.

Die Datenbank bildet für jede passende Zeile eine neue, breitere Zeile. Schreibe vor jede Spalte den Tabellennamen, damit klar ist, woher sie kommt.

Teure Artikel mit dem Namen ihrer Kategorie

Befehl
sql "SELECT products.name, categories.name AS kategorie, products.price FROM products JOIN categories ON categories.id = products.category_id WHERE products.price > 60 ORDER BY products.price"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die ersten drei Bestellungen mit Kundenname

Befehl
sql "SELECT orders.id, customers.first_name, customers.city, orders.status FROM orders JOIN customers ON customers.id = orders.customer_id WHERE orders.id <= 3 ORDER BY orders.id"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Probier es: Vorstellungen mit Titel

Code: sql
-- Jede Vorstellung mit dem Titel ihres Films.
SELECT filme.titel, vorstellungen.saal, vorstellungen.uhrzeit
FROM vorstellungen
JOIN filme ON filme.id = vorstellungen.film_id
ORDER BY vorstellungen.uhrzeit;
-- Ändere JOIN in LEFT JOIN und tausche die Tabellen hinter FROM und JOIN.

Ein einfacher JOIN lässt Zeilen ohne Partner weg

Ein normaler JOIN zeigt nur Zeilen, die auf beiden Seiten einen Partner haben. Ein Film ohne Vorstellung verschwindet aus dem Ergebnis.

Ein LEFT JOIN behält alle Zeilen der Tabelle vor dem Wort JOIN. Hat eine keinen Partner, steht in den Spalten der anderen Tabelle NULL.

Beispiel: dieselben Filme, zwei Joins

FilmMit JOINMit LEFT JOIN
Sturmflut2 Zeilen2 Zeilen
Hinterhof2 Zeilen2 Zeilen
Nachtzug1 Zeile1 Zeile
Nordlicht (keine Vorstellung)fehlt1 Zeile mit NULL

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele glauben, ein JOIN zeige immer alle Zeilen beider Tabellen. Das stimmt nicht. Ein normaler JOIN wirft jede Zeile ohne Partner weg, ohne eine Meldung. Willst du auch die ohne Partner sehen, nimm einen LEFT JOIN.

Artikel mit Kategorie zählen

Befehl
sql "SELECT COUNT(*) AS mit_kategorie FROM products JOIN categories ON categories.id = products.category_id"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Artikel ohne Kategorie mit einem LEFT JOIN finden

Befehl
sql "SELECT products.name FROM products LEFT JOIN categories ON categories.id = products.category_id WHERE categories.id IS NULL ORDER BY products.name"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Probier es: Filme ohne Vorstellung

Code: sql
-- Alle Filme, auch die ohne Vorstellung.
SELECT filme.titel, vorstellungen.uhrzeit
FROM filme
LEFT JOIN vorstellungen ON vorstellungen.film_id = filme.id
ORDER BY filme.titel;
-- Welche zwei Filme zeigen NULL? Ergänze WHERE vorstellungen.id IS NULL.

Eine eigene Datenbank anlegen

Befehl
sql "CREATE DATABASE IF NOT EXISTS student_kino"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Abkürzung dafür

Befehl
alias kino='mariadb -h db -u student -pstudent student_kino -t -e'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Von vorn beginnen: beide Tabellen löschen

Befehl
kino "DROP TABLE IF EXISTS vorstellungen, filme"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Tabelle der Filme anlegen

Befehl
kino "CREATE TABLE filme (id INT AUTO_INCREMENT PRIMARY KEY, titel VARCHAR(60) NOT NULL)"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Tabelle der Vorstellungen mit Fremdschlüssel

Befehl
kino "CREATE TABLE vorstellungen (id INT AUTO_INCREMENT PRIMARY KEY, film_id INT NOT NULL, saal VARCHAR(10) NOT NULL, uhrzeit TIME NOT NULL, FOREIGN KEY (film_id) REFERENCES filme(id))"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Einen Film eintragen

Befehl
kino "INSERT INTO filme (titel) VALUES ('Sturmflut')"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Vorstellung für Film 9 eintragen

Befehl
kino "INSERT INTO vorstellungen (film_id, saal, uhrzeit) VALUES (9, 'Saal 1', '18:00')"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Über dieses Lab und seinen Quellcode: MySQL-und-phpMyAdmin-Lab mit Beispieldatenbank eines Shops zum Üben von SQL

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.