Zum Inhalt springen

Informatik · Klasse 11–13 · aktualisiert

SQL lernen: Abfragen, JOINs und Datenänderungen

Du liest Tabellen mit SQL, verknüpfst passende Zeilen, berechnest Gruppensummen und erkennst die Wirkung von UPDATE und DELETE.

0 von 9 Aufgaben gelöst

SQL lernen: Abfragen, JOINs und Datenänderungen

Kurz gesagt

Mit SQL fragst du Daten aus Tabellen ab und verknüpfst passende Zeilen mit JOIN. GROUP BY und SUM liefern Gruppensummen. Bei einfachen UPDATE- und DELETE-Anweisungen fehlt ohne WHERE die Zeilenauswahl; zusätzliche Regeln können die Ausführung verhindern oder beeinflussen.

Eine Datenbank speichert geordnete Daten, zum Beispiel in Tabellen. SQL bedeutet „Structured Query Language“, auf Deutsch etwa „strukturierte Abfragesprache“: Damit liest und bearbeitest du solche Daten. Eine Anweisung ist ein einzelner Auftrag; eine Abfrage liest Daten und liefert eine Ergebnistabelle. Alle Daten dieser Lektion sind erfunden; die SQL-Anweisungen gelten für PostgreSQL, ein Programm zum Verwalten von Datenbanken, und setzen die beschriebenen Tabellen voraus.

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 Tabelle ordnet Daten in Spalten und Zeilen. Ein Attribut ist eine benannte Spalte, etwa ziel_id. Ein Datensatz ist eine Zeile mit den zusammengehörenden Werten einer Sendung. Die unten gezeigten Tabellen heißen abholorte und sendungen.

Ein Primärschlüssel kennzeichnet jeden Datensatz eindeutig. Seine Werte dürfen weder doppelt vorkommen noch NULL sein. NULL ist eine besondere Markierung für einen fehlenden Wert, keine leere Zeichenfolge. Eine Tabelle kann höchstens einen Primärschlüssel haben; dieser kann jedoch mehrere Spalten gemeinsam umfassen.

Ein Fremdschlüssel verbindet Tabellen durch eine gespeicherte Beziehung: Ein vorhandener Verweis muss zu einem Schlüsselwert der Zieltabelle passen. Das Ziel muss durch einen Primärschlüssel oder eine andere passende Eindeutigkeitsregel für die gesamte Zieltabelle abgesichert sein. Ein Fremdschlüssel kann mehrere Spalten umfassen und auch auf dieselbe Tabelle verweisen.

NULL braucht eine eigene Regel: Bei einem einspaltigen Fremdschlüssel verlangt NULL normalerweise keinen passenden Zielwert. Bei mehreren Fremdschlüsselspalten reicht dafür normalerweise bereits ein NULL. Die zusätzliche PostgreSQL-Regel MATCH FULL erlaubt diese Ausnahme dagegen nur, wenn sämtliche beteiligten Werte NULL sind. Die Regel NOT NULL verbietet NULL in einer Spalte.

Im Beispiel ist ort_id der Primärschlüssel von abholorte. sendung_id ist der Primärschlüssel von sendungen. ziel_id ist dort ein Fremdschlüssel auf abholorte.ort_id; der Punkt trennt Tabellenname und Spaltenname. Mehrere Sendungen dürfen denselben Zielort haben. Für ziel_id gibt es hier keine zusätzliche Regel, die doppelte Werte verbietet.

abholorte: ort_idort
4Nord
9Süd
sendungen: sendung_idziel_id
1014
1024
1039

Definition

Schlüssel

Ein Primärschlüssel identifiziert eine Zeile eindeutig und ohne NULL. Ein Fremdschlüssel sichert passende Verweise auf dafür geeignete Schlüsselwerte; für NULL gelten besondere Regeln.

Teste dich

LeichtWelche Aussage passt zu den gezeigten Tabellen und ihren Schlüsselregeln?

Alles auf einen Blick

SQL

  • Tabellen

    Attribute sind Spalten, Datensätze sind Zeilen. Primärschlüssel identifizieren Zeilen; Fremdschlüssel sichern passende Verweise mit besonderen NULL-Regeln.

  • Abfragen

    SELECT bestimmt die Ausgabe, FROM die Quelle und WHERE die Zeilenauswahl durch eine wahre Bedingung.

  • Verknüpfung

    INNER JOIN liefert passende Zeilenpaare. Verschiedene Spaltennamen und mehrere Partner je Ausgangszeile sind möglich.

  • Gruppen

    GROUP BY gruppiert gleiche Werte. SUM addiert je Gruppe. Einzelne Ausgabespalten müssen grundsätzlich gruppiert sein; die erklärte Ausnahme setzt den vollständigen Primärschlüssel ihrer Tabelle in GROUP BY voraus.

  • Datenänderungen

    Ohne WHERE fehlt bei einfachen UPDATE- und DELETE-Anweisungen die Zeilenauswahl. SET bestimmt die zu bearbeitenden Spalten; Regeln und Zusatzaktionen können die Wirkung begrenzen.

Musteraufgabe · Schritt für Schritt

Bauteilmengen einer Farbe zusammenrechnen

  1. 1Erfundene Daten: bauteile hat die Spalten farbe und menge. Eine Zeile enthält 'gelb' und 3, eine 'blau' und 7 und eine weitere 'gelb' und 5.
  2. 2Gesucht ist die Gesamtmenge für 'gelb'. WHERE farbe = 'gelb' behält dafür die Zeilen mit den Mengen 3 und 5.
  3. 3GROUP BY farbe fasst diese beiden Zeilen zur gelben Gruppe zusammen. SUM(menge) addiert deren Mengen.
  4. 4Die ausführbare Abfrage lautet: SELECT farbe, SUM(menge) AS gesamt FROM bauteile WHERE farbe = 'gelb' GROUP BY farbe;
  5. 5Das Ergebnis enthält eine Zeile: farbe hat den Wert 'gelb', gesamt den Wert 8. Die blaue Menge 7 gehört nicht zum Ergebnis.

Fehler finden

Prüfe die Bearbeitung einer Planungstabelle 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.

In einer Tabelle ist jede Zeile ein . Beim INNER JOIN bleibt ein Zeilenpaar erhalten, wenn seine ON-Bedingung ist. Bei GROUP BY mit mehreren Zeilen je Gruppe summiert SUM die Werte .

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: SQL

LeichtDie erfundene Tabelle tickets ist leer und hat ticket_id als Primärschlüssel. Weitere Regeln sind hier nicht zu beachten. Welche Beschreibung zweier neu einzufügender Zeilen erfüllt die Primärschlüsselregel?
MittelErfundene Daten: boote enthält die Spalten boot_id und platz sowie die Zeilen (41, 6) und (42, 6). plaetze enthält platz_id und farbe sowie die Zeile (6, 'grün'). Die Klammern geben die Werte in dieser Spaltenreihenfolge an. Welche Ergebniszeilen liefert SELECT boote.boot_id, plaetze.farbe FROM boote INNER JOIN plaetze ON boote.platz = plaetze.platz_id;?
SchwerDie erfundene Tabelle spenden hat die Spalten team, betrag und tag. Ihre Zeilen sind in dieser Reihenfolge angegeben: ('Rot', 5, 'Mo'), ('Rot', 8, 'Di'), ('Blau', 6, 'Di') und ('Blau', 4, 'Mo'). Welche Ausgabe liefert SELECT team, SUM(betrag) AS gesamt FROM spenden WHERE tag = 'Di' GROUP BY team;?

Weiterlesen in Informatik