Zum Inhalt springen

Informatik · Klasse 11–13 · aktualisiert

SQL JOIN: Tabellen sicher verknüpfen

Du verknüpfst Tabellen, unterscheidest JOIN-Arten und erkennst, wann fehlende Bedingungen unerwünschte Zeilenkombinationen erzeugen.

0 von 9 Aufgaben gelöst

SQL JOIN: Tabellen sicher verknüpfen

Kurz gesagt

Ein JOIN verknüpft Zeilen aus Tabellen: entweder nach einer Bedingung oder zu allen möglichen Paaren. Die JOIN-Art legt fest, ob beim Verknüpfen mit einer Bedingung auch Zeilen ohne passenden Partner erscheinen.

Eine Abfrage fordert Daten aus Tabellen an. Hier lernst du die JOIN-Schreibweise für PostgreSQL, ein Datenbankmanagementsystem zum Speichern und Abfragen von Daten. Alle Tabellen und Daten dieser Lektion sind erfunden.

Deine Lernziele

Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Termi das Ziel für dich ab.

4 Abschnitte

Eine Tabellenzeile heißt auch Datensatz. Ein JOIN verbindet Zeilen aus zwei Tabellen zu Ergebniszeilen. Dabei entscheidet eine Verknüpfungsbedingung, welche Zeilen zusammenpassen. Für jedes passende Zeilenpaar entsteht eine Ergebniszeile.

In einer SQL-Abfrage wählt SELECT die Ergebnisspalten aus. FROM nennt die Ausgangstabelle, JOIN ergänzt die zweite Tabelle. Hinter ON steht die Verknüpfungsbedingung. Das Zeichen = prüft hier, ob zwei Werte gleich sind. Die verglichenen Spalten dürfen unterschiedlich heißen. Entscheidend ist, dass ihre Werte die gewünschte Zuordnung ausdrücken. Ein Code ist hier eine Kennung für einen Eintrag.

Mit AS vergibst du einen Alias, also einen Ersatznamen für eine Tabelle innerhalb der Abfrage. In s.zielcode trennt der Punkt den Tabellenalias s vom Spaltennamen zielcode. Kommas trennen ausgewählte Spalten. Das Semikolon beendet die SQL-Anweisung. SELECT * wählt alle Ergebnisspalten aus.

Ein JOIN ohne vorangestellte Typangabe bedeutet INNER JOIN. Dieser liefert die passenden Paare. Eine Ausgangszeile kann mehrere Partner haben und dann in mehreren Ergebniszeilen vorkommen. Ein JOIN setzt also keine eindeutigen Werte in den verglichenen Spalten voraus. In den folgenden Datenbeispielen schreiben wir Zeilen als Klammerpaare in der genannten Spaltenreihenfolge. Einfache Anführungszeichen kennzeichnen Textwerte.

Definition

Verknüpfungsbedingung

Eine Regel dafür, welche Zeilen aus zwei Tabellen zusammenpassen. Bei JOIN ... ON entsteht ein Treffer, wenn die Bedingung für das Zeilenpaar wahr ist.

Beispiel: Sendungen einem Depot zuordnen

  1. 1sendungen hat die Spalten sendung und zielcode: (41, 'A'), (42, 'B'), (43, 'A').
  2. 2depots hat die Spalten code und ort: ('A', 'Nord'), ('B', 'Süd').
  3. 3SELECT s.sendung, d.ort FROM sendungen AS s JOIN depots AS d ON s.zielcode = d.code;
  4. 4Die Bedingung vergleicht den Zielcode einer Sendung mit dem Code eines Depots.
  5. 5Das Ergebnis enthält (41, 'Nord'), (42, 'Süd') und (43, 'Nord').

Merke: Gleiche Spaltennamen sind für ON nicht nötig. Gibt es für eine Ausgangszeile mehrere passende Partner, entsteht für jeden Partner eine eigene Ergebniszeile.

Teste dich

Leichtpflanzen(etikett, topfcode) enthält ('P7', 'T2'). toepfe(code, farbe) enthält ('T2', 'blau'). Die Aliase sind p und t. Welche Bedingung ordnet die Pflanze ihrem Topf zu?

Alles auf einen Blick

SQL JOIN

  • Zuordnung

    ON kann auch unterschiedlich benannte Spalten vergleichen; die Bedingung muss die gewünschte Beziehung ausdrücken.

  • Treffer

    Für jedes passende Zeilenpaar entsteht eine Ergebniszeile, auch bei mehreren Partnern je Ausgangszeile.

  • Erhaltung

    LEFT, RIGHT und FULL JOIN ergänzen Zeilen ohne Partner auf der jeweiligen Seite um NULL-Werte.

  • Spaltenwahl

    USING nennt gemeinsame Vergleichsspalten ausdrücklich; NATURAL verwendet alle gemeinsamen Spaltennamen.

  • Fehlersuche

    Prüfe auch WHERE, USING und NATURAL, bevor du eine fehlende Bedingung vermutest.

Musteraufgabe · Schritt für Schritt

Alle Automaten mit ihrem Standort anzeigen

  1. 1automaten(geraet, standortcode) enthält ('A1', 'O2'), ('A2', 'O5') und ('A3', 'O2'). standorte(code, bezeichnung) enthält ('O2', 'Halle') und ('O7', 'Eingang').
  2. 2Jeder Automat soll erscheinen, auch wenn sein Standortcode keinen Partner hat. Deshalb steht automaten links und wir wählen LEFT JOIN.
  3. 3Die Zuordnung vergleicht a.standortcode mit s.code. Die Aliase a und s bezeichnen automaten und standorte.
  4. 4SELECT a.geraet, s.bezeichnung FROM automaten AS a LEFT JOIN standorte AS s ON a.standortcode = s.code;
  5. 5Für 'A1' und 'A3' passt jeweils der Standort 'O2'. Es entstehen ('A1', 'Halle') und ('A3', 'Halle').
  6. 6Für 'A2' fehlt der Standort 'O5'. LEFT JOIN ergänzt deshalb ('A2', NULL). Das Ergebnis enthält insgesamt drei Zeilen.

Fehler finden

Prüfe die Abfragen zu Bällen und Netzen In einer Zeile steckt ein Fehler. Tippe sie an.

Lückentext

Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.

Zwei Tabellen haben je eine Zeile mit demselben Code. Die linke Tabelle hat zusätzlich eine Zeile ohne Partner. Ein LEFT JOIN über die gleichen Codes liefert Ergebniszeilen. Die Spalte „code“ kommt in beiden Tabellen vor. Soll die Verknüpfung auch nach dem Hinzufügen weiterer gemeinsamer Spaltennamen ausdrücklich nur „code“ vergleichen, wählst du . Zwei Tabellen enthalten 3 und 4 Zeilen. Eine FROM-Kommaliste ohne WHERE-Filter erzeugt Ergebniszeilen.

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: SQL JOIN

Leichtnotizen(code) enthält 'L', 'L' und 'M'. mappen(code) enthält 'L' und 'N'. Ein LEFT JOIN vergleicht die Codes auf Gleichheit; notizen steht links. Wie groß ist das Ergebnis?
Mittelfilme hat zunächst die Spalten code und titel, rechte die Spalten code und gebiet. Später erhält filme ebenfalls eine Spalte gebiet. Welche Spalten verwendet NATURAL JOIN danach für Vergleiche?
Schwerwerkzeuge(kennung, koffercode) enthält ('W1', 'K7') und ('W2', 'K7'). koffer(code) enthält 'K7', 'K8' und 'K9'. Was gilt für SELECT w.kennung, k.code FROM werkzeuge AS w, koffer AS k WHERE w.koffercode = k.code;?

Weiterlesen in Informatik