🗄️ SQL

Inhalt

🏠 Hausaufgabe: Lies den Text, schau dir das Video an und bearbeite die Übung weiter unten — zuhause, vor der nächsten Stunde. Im Unterricht prüfen wir mit einer Kurzkontrolle (KK) in Moodle, ob der Stoff sitzt.

SQL steht für Structured Query Language. Ganz einfach gesagt: SQL ist die Sprache, mit der man einer Datenbank sagt, was sie tun soll — Daten zeigen, einfügen, ändern oder löschen. In der letzten Kachel hast du in LibreOffice Base über Knöpfe und Menüs gefiltert und sortiert. SQL macht dasselbe, nur als Text, den du selbst schreibst.

Warum lohnt sich das? Weil eine geschriebene Abfrage genauer und schneller wiederholbar ist als ein Klick-Marathon durch Menüs, gerade wenn die Datenbank riesig ist. Beide Wege — grafische Oberfläche und SQL — führen zum selben Ergebnis, nur der Weg dahin unterscheidet sich.

🚩 Bearbeite unbedingt die Übung weiter unten, bevor du die Kurzkontrolle in Moodle schreibst.

🎬 Unsere Beispieltabelle: Streaming-Dienst

Alle Beispiele auf dieser Seite beziehen sich auf eine Tabelle ausgeliehen eines fiktiven Streaming-Dienstes:

nutzerfilmdauer
MiaFindet Nemo100
BenInception148
MiaShrek90
LeaInception148
BenFindet Nemo100

nutzer ist der Name, der geschaut hat, film der Titel, dauer die Länge in Minuten. Jede Zeile ist ein Wiedergabe-Eintrag.

🔍 SELECT — Daten abfragen

SELECT holt Daten aus einer Tabelle. Diese Abfrage zeigt alle Filme:

SELECT film FROM ausgeliehen;

Übersetzt: "Zeig mir die Spalte film aus der Tabelle ausgeliehen." Mit SELECT * statt SELECT film bekommst du alle Spalten auf einmal.

🎯 WHERE — filtern

WHERE schränkt ein, welche Zeilen du sehen willst. Nur Mias Filme:

SELECT * FROM ausgeliehen WHERE nutzer = 'Mia';

Ohne WHERE bekommst du immer alle Zeilen, mit WHERE nur die, die zur Bedingung passen.

➕ INSERT — einfügen

INSERT fügt eine neue Zeile hinzu. Lea schaut jetzt auch Shrek:

INSERT INTO ausgeliehen (nutzer, film, dauer)
VALUES ('Lea', 'Shrek', 90);

✏️ UPDATE — ändern

UPDATE ändert bestehende Werte. Angenommen, die Dauer von Inception war falsch eingetragen:

UPDATE ausgeliehen SET dauer = 150 WHERE film = 'Inception';
🚀 Für Schnelle

Was passiert wohl, wenn du bei UPDATE die WHERE-Zeile komplett weglässt? Überlege, bevor du weiterliest — dann lies noch mal den Warnhinweis unten.

🗑️ DELETE — löschen

DELETE entfernt Zeilen aus der Tabelle. Bens Eintrag zu Findet Nemo soll weg:

DELETE FROM ausgeliehen WHERE nutzer = 'Ben' AND film = 'Findet Nemo';
⚠️ Vorsicht: Sowohl UPDATE als auch DELETE ohne WHERE betreffen alle Zeilen der Tabelle auf einmal — nicht nur eine. Ein DELETE FROM ausgeliehen; ganz ohne Bedingung löscht die komplette Tabelle leer.

🔍 SELECT, WHERE, INSERT, UPDATE, DELETE im Überblick
BefehlWirkung
SELECTDaten abfragen / anzeigen
WHEREErgebnis filtern (kein eigener Befehl, ergänzt SELECT/UPDATE/DELETE)
INSERTneue Zeile einfügen
UPDATEbestehende Werte ändern
DELETEZeile(n) löschen
🔍 Vertiefung: Mehrere Zeilen zusammenfassen (Aggregatsfunktionen)

Manchmal willst du nicht einzelne Zeilen sehen, sondern eine Zusammenfassung — z. B. wie viele Einträge es gibt oder wie lang ein Film im Schnitt ist. Dafür gibt es Aggregatsfunktionen:

SELECT COUNT(*) FROM ausgeliehen;

Zählt, wie viele Zeilen die Tabelle hat — bei unserer Beispieltabelle also 5.

SELECT AVG(dauer) FROM ausgeliehen;

AVG (Durchschnitt), SUM (Summe), MIN und MAX funktionieren genauso — sie fassen eine ganze Spalte zu einem einzigen Wert zusammen, statt jede Zeile einzeln zu zeigen.

Mit GROUP BY lässt sich das noch weiterdenken: "Zeig mir für jeden Nutzer, wie viele Filme er geschaut hat" statt nur eine Gesamtzahl für die ganze Tabelle:

SELECT nutzer, COUNT(*) FROM ausgeliehen GROUP BY nutzer;
🔗 Vertiefung: JOIN — zwei Tabellen verknüpfen

In echten Datenbanken stehen zusammengehörige Daten fast nie in einer einzigen großen Tabelle, sondern verteilt auf mehrere (siehe die letzte Kachel zu ERM). Angenommen, es gibt zusätzlich eine Tabelle bewertungen mit Sternebewertungen zu Filmen:

filmsterne
Findet Nemo4
Inception5
Shrek4

Mit JOIN lassen sich beide Tabellen über eine gemeinsame Spalte (hier film) zu einem gemeinsamen Ergebnis verknüpfen:

SELECT ausgeliehen.nutzer, ausgeliehen.film, bewertungen.sterne
FROM ausgeliehen
JOIN bewertungen ON ausgeliehen.film = bewertungen.film;

Ergebnis: eine Tabelle, die zeigt, wer welchen Film geschaut hat und wie er bewertet wurde — obwohl diese Information ursprünglich in zwei getrennten Tabellen steckte.

🖱️ Klick dich durch eine Abfrage

Klick auf einen Teil der folgenden Abfrage, um zu sehen, was er bewirkt:

SELECT film FROM ausgeliehen WHERE dauer > 100 ;

👆 Klick auf einen Baustein der Abfrage.

🚀 Für Schnelle

Schreibe in Gedanken (oder auf Papier) eine Abfrage, die aus der Beispieltabelle nur die Filme zeigt, die Ben angeschaut hat und die länger als 120 Minuten sind. Tipp: Zwei Bedingungen lassen sich mit AND verbinden.

🃏 Lernkarten

Zum Auswendiglernen: Karte antippen zum Umdrehen.

…
…
Karte 1 von 1

⭐ Üben

Fragen werden geladen …

🎮 Stundenaufgabe

Wähle eine Vertiefung, danach geht es an die praktische Übung:

🤖 KI-Prompt zum Üben:
🦆 duck.ai öffnen
Rolle: Du bist ein geduldiger Lernpartner für Informatik.
Aufgabe: Frag mich nacheinander ab, wofür SELECT, WHERE, INSERT, UPDATE und DELETE stehen, und lass mich raten, bevor du die Antwort verrätst. Gib danach für jeden Befehl ein kurzes Beispiel mit einer Tabelle "ausgeliehen" (Spalten nutzer, film, dauer).
Kontext: Ich bin in Klasse 9 und lerne gerade die Grundlagen von SQL.
Stil: Einfache, kurze Sätze, keine Fachwörter ohne Erklärung.

🧩 Praktischer Teil mit SQLverine

Zentrales Werkzeug für den praktischen Teil ist SQLverine.org — ein browserbasiertes, spielerisches SQL-Lerntool, kein Login und keine Installation nötig.

🧭 SQLverine zum ersten Mal nutzen — so geht's
  1. Öffne sqlverine.org im Browser — keine Anmeldung nötig, es startet sofort.
  2. Wähle die erste Übung bzw. das erste Level aus dem Startbildschirm.
  3. Du siehst eine Beispieltabelle und eine Aufgabe dazu. Schreib deine SQL-Abfrage in das Eingabefeld und lass sie ausführen.
  4. Stimmt das Ergebnis nicht, gibt dir SQLverine eine Rückmeldung — einfach anpassen und erneut ausführen, beliebig oft.

Bearbeitet zu zweit die ersten Level bei SQLverine:

  1. Löst gemeinsam mehrere einfache SELECT-Abfragen bei SQLverine. Wechselt euch ab: Eine Person schreibt die Abfrage, die andere erklärt in eigenen Worten, was sie bewirkt, bevor ihr sie ausführt.
  2. Notiert euch eine Abfrage, bei der ihr zunächst danebenlagt — was war der Denkfehler?

✍️ Eigene Abfrage formulieren

Formuliere schriftlich (auf Papier oder digital, kein SQL-Tool zwingend nötig) eine eigene SELECT-Abfrage mit WHERE-Bedingung auf unsere Beispieltabelle ausgeliehen von oben:

  1. Schreibe eine Abfrage, die alle Filme zeigt, die Ben geschaut hat.
  2. Schreibe eine zweite Abfrage, die alle Einträge mit einer Dauer unter 100 Minuten zeigt.
  3. Tauscht eure Abfragen mit einer Partnerin oder einem Partner und prüft gegenseitig, ob sie zur Aufgabe passen.

📸 InstaHub — SQL auf einem echten Mini-Netzwerk

InstaHub ist ein Instagram-Nachbau nur für den Unterricht, mit echten Nutzern, Fotos, Kommentaren und Likes in einer richtigen Datenbank. Anders als bei SQLverine oder W3Schools ist die Tabellenstruktur hier nicht extra einfach gemacht — genau das macht es spannend.

🔐 Zu InstaHub anmelden

Login-Daten stehen direkt auf der Anmeldeseite. Nutzt den Admin-Zugang (admin / admin123) — der hat als Einziger auch Zugriff auf den SQL-Bereich.

🧭 InstaHub zum ersten Mal nutzen — so geht's
  1. Auf public.instahub.org/login mit admin / admin123 anmelden.
  2. Oben rechts auf das Datenbank-Symbol klicken, dann SQL auswählen.
  3. Darunter steht die Liste aller Tabellen mit ihren Spalten (u. a. users, photos, comments, likes, follows, tags).
  4. Abfrage ins Textfeld schreiben und auf Ausführen klicken.

Ausführliche Doku (für Interessierte): wi-wissen.github.io/instahub-doc-de

⚠️ Nur SELECT verwenden: Der Admin-Zugang ist geteilt — alle in der Klasse arbeiten in derselben Datenbank. Ein DELETE oder UPDATE ohne WHERE würde Daten für alle anderen mitkaputt machen. Zum Ausprobieren von INSERT/UPDATE/DELETE bitte bei SQLverine oder W3Schools bleiben.

Findet bei InstaHub eigene Abfragen für Folgendes:

  1. Zeigt username und city aller Nutzer in der Tabelle users.
  2. Zeigt mit WHERE nur die Nutzer mit gender = 'female'.
  3. Schaut euch die Tabelle photos an und findet mit WHERE ... LIKE '%...%' Fotos, deren Beschreibung ein bestimmtes Wort enthält (z. B. einen Hashtag-Begriff, den ihr im Feed gesehen habt).
  4. Vergleicht: Welche Spalten aus der Beispieltabelle ausgeliehen von oben findet ihr in ähnlicher Form bei photos, likes oder comments wieder?

⚖️ Grafische Oberfläche vs. SQL-Abfrage

Diskutiert kurz in der Gruppe, ausgehend von der letzten Kachel (Filtern/Sortieren-Knöpfe in LibreOffice Base) im Vergleich zu SQL-Abfragen:

  1. Was war beim Klicken in LibreOffice Base einfacher, was war bei einer geschriebenen SQL-Abfrage einfacher?
  2. Was würdet ihr bei einer riesigen Datenbank mit Millionen Zeilen bevorzugen — und warum?
  3. Fällt euch ein Fall ein, bei dem SQL eindeutig im Vorteil ist, weil die Aufgabe mit Klicken kaum zu lösen wäre?
🚀 Bonus für Schnelle

Probiert bei SQLverine oder im W3Schools SQL-Editor aus, was passiert, wenn ihr zwei Bedingungen mit AND statt nur einer WHERE-Bedingung kombiniert.