Warum Joins? (Wiederholung des relationalen Modells)
Wiederholen Sie das relationale Modell, normalisierte Tabellen und Fremdschlüssel und verstehen Sie, warum JOIN die Brücke bildet, die Daten aus verschiedenen Tabellen wieder zusammenführt.
Warum Joins? (Wiederholung des relationalen Modells) ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Normalisierung in einem Bild
Statt Daten zu duplizieren, teilen Sie sie auf mehrere Tabellen auf:
users– id, name, emailorders– id, user_id, total
Jede Bestellung verweist über die ID auf einen Benutzer, statt dessen Namen und E-Mail-Adresse erneut zu speichern.
Warum normalisieren?
Vorteile:
- Keine Duplikate – ändern Sie die E-Mail-Adresse eines Benutzers an einer einzigen Stelle
- Kleinere Tabellen – bessere Cache-Trefferrate
- Constraints erzwingen die Beziehungen
Fremdschlüssel definieren die Verbindung
Die Verbindung wird mit einem FOREIGN KEY deklariert:
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id),
total NUMERIC(10,2) NOT NULL
);Daten mit JOIN wieder zusammensetzen
Um „den Namen des Benutzers bei jeder Bestellung“ anzuzeigen, verknüpfen Sie die Tabellen mit JOIN wieder:
SELECT o.id, o.total, u.full_name, u.email
FROM orders o
JOIN users u ON u.id = o.user_id
ORDER BY o.id;Das mentale Modell: gefiltertes kartesisches Produkt
Konzeptionell funktioniert ein JOIN so:
- Er bildet das Kreuzprodukt zweier Tabellen (jede Zeile von A wird mit jeder Zeile von B kombiniert)
- Er behält nur Paare, für die die ON-Bedingung TRUE ergibt
In der Praxis verwendet die Datenbank einen Hash-, Merge- oder Nested-Loop-Join – das Ergebnis ist jedoch dasselbe.
Eins-zu-viele
Ein Benutzer kann viele Bestellungen haben. Die „viele“-Seite enthält den Fremdschlüssel.
-- Each order row points back to its user:
SELECT u.email, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email;Viele-zu-viele über eine Verknüpfungstabelle
Tags ↔ Posts: Führen Sie eine dritte Tabelle ein:
CREATE TABLE posts (id BIGSERIAL PRIMARY KEY, title TEXT);
CREATE TABLE tags (id BIGSERIAL PRIMARY KEY, name TEXT);
CREATE TABLE post_tags (
post_id BIGINT REFERENCES posts(id),
tag_id BIGINT REFERENCES tags(id),
PRIMARY KEY (post_id, tag_id)
);Viele-zu-viele abfragen
Zwei Joins bringen alle Daten zusammen:
SELECT p.title, t.name
FROM posts p
JOIN post_tags pt ON pt.post_id = p.id
JOIN tags t ON t.id = pt.tag_id
WHERE t.name = 'sql';Wann denormalisieren?
Denormalisierung (das Duplizieren von Daten) wird manchmal aus Performancegründen eingesetzt – etwa für zwischengespeicherte berechnete Summen, Volltextspalten oder materialisierte Sichten. Beginnen Sie mit einem normalisierten Modell und denormalisieren Sie erst auf Grundlage gemessener Werte.
Joins vs. Unterabfragen
Viele JOIN-Abfragen lassen sich als Unterabfragen formulieren und umgekehrt. Verwenden Sie die Variante, die besser lesbar ist; moderne Abfrageplaner erzeugen häufig denselben Plan.
Fremdschlüssel werden nicht automatisch erzwungen
Sie müssen sie mit REFERENCES deklarieren. Selbst bei FK-Constraints müssen Sie die FK-Spalte selbst indizieren – deklarieren Sie dafür ausdrücklich einen Index, um die Join-Performance zu verbessern.
Zusammenfassung
Joins setzen Daten wieder zusammen, die zur Wahrung der Integrität auf mehrere Tabellen verteilt wurden.
- Fremdschlüssel deklarieren die Verbindung
- JOIN macht die Normalisierung zur Abfragezeit rückgängig
- Eins-zu-viele wird über einen FK auf der „viele“-Seite umgesetzt, viele-zu-viele über eine Verknüpfungstabelle
Kurze Verständnisprüfung
Welche Tabelle enthält in einer Eins-zu-viele-Beziehung zwischen users und orders die Fremdschlüsselspalte?
Lerne SQL mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 46
- Lektionen
- 183
Häufig gestellte Fragen
Ist die Lektion „Warum Joins? (Wiederholung des relationalen Modells)“ kostenlos?
Ja — der vollständige Text von „Warum Joins? (Wiederholung des relationalen Modells)“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Warum Joins? (Wiederholung des relationalen Modells)“?
Wiederholen Sie das relationale Modell, normalisierte Tabellen und Fremdschlüssel und verstehen Sie, warum JOIN die Brücke bildet, die Daten aus verschiedenen Tabellen wieder zusammenführt. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Warum Joins? (Wiederholung des relationalen Modells)“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Warum Joins? (Wiederholung des relationalen Modells)
- Funktionsweise von INNER JOIN
- LEFT/RIGHT JOIN und OUTER Joins
- Self-Joins und Aliase