🗄️ SQL
Inhalt
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.
🎬 Unsere Beispieltabelle: Streaming-Dienst
Alle Beispiele auf dieser Seite beziehen sich auf eine Tabelle ausgeliehen eines fiktiven Streaming-Dienstes:
| nutzer | film | dauer |
|---|---|---|
| Mia | Findet Nemo | 100 |
| Ben | Inception | 148 |
| Mia | Shrek | 90 |
| Lea | Inception | 148 |
| Ben | Findet Nemo | 100 |
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';
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';
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
| Befehl | Wirkung |
|---|---|
| SELECT | Daten abfragen / anzeigen |
| WHERE | Ergebnis filtern (kein eigener Befehl, ergänzt SELECT/UPDATE/DELETE) |
| INSERT | neue Zeile einfügen |
| UPDATE | bestehende Werte ändern |
| DELETE | Zeile(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:
| film | sterne |
|---|---|
| Findet Nemo | 4 |
| Inception | 5 |
| Shrek | 4 |
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.
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.
⭐ Üben
Fragen werden geladen …
🎮 Stundenaufgabe
Wähle eine Vertiefung, danach geht es an die praktische Übung:
YouTube-Video ansehen
Suche nach "SQL Grundlagen einfach erklärt"
🧪W3Schools SQL-Editor
Online, kostenlos, eigene Abfragen live ausprobieren
Mit KI besprechen
Prompt kopieren und in eine KI einfügen
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
- Öffne sqlverine.org im Browser — keine Anmeldung nötig, es startet sofort.
- Wähle die erste Übung bzw. das erste Level aus dem Startbildschirm.
- Du siehst eine Beispieltabelle und eine Aufgabe dazu. Schreib deine SQL-Abfrage in das Eingabefeld und lass sie ausführen.
- 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:
- 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. - 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:
- Schreibe eine Abfrage, die alle Filme zeigt, die Ben geschaut hat.
- Schreibe eine zweite Abfrage, die alle Einträge mit einer Dauer unter 100 Minuten zeigt.
- 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.
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
- Auf public.instahub.org/login mit
admin/admin123anmelden. - Oben rechts auf das Datenbank-Symbol klicken, dann SQL auswählen.
- Darunter steht die Liste aller Tabellen mit ihren Spalten (u. a.
users,photos,comments,likes,follows,tags). - Abfrage ins Textfeld schreiben und auf Ausführen klicken.
Ausführliche Doku (für Interessierte): wi-wissen.github.io/instahub-doc-de
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:
- Zeigt
usernameundcityaller Nutzer in der Tabelleusers. - Zeigt mit
WHEREnur die Nutzer mitgender = 'female'. - Schaut euch die Tabelle
photosan und findet mitWHERE ... LIKE '%...%'Fotos, deren Beschreibung ein bestimmtes Wort enthält (z. B. einen Hashtag-Begriff, den ihr im Feed gesehen habt). - Vergleicht: Welche Spalten aus der Beispieltabelle
ausgeliehenvon oben findet ihr in ähnlicher Form beiphotos,likesodercommentswieder?
⚖️ 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:
- Was war beim Klicken in LibreOffice Base einfacher, was war bei einer geschriebenen SQL-Abfrage einfacher?
- Was würdet ihr bei einer riesigen Datenbank mit Millionen Zeilen bevorzugen — und warum?
- Fällt euch ein Fall ein, bei dem SQL eindeutig im Vorteil ist, weil die Aufgabe mit Klicken kaum zu lösen wäre?
Probiert bei SQLverine oder im W3Schools SQL-Editor aus, was passiert, wenn ihr zwei Bedingungen mit AND statt nur einer WHERE-Bedingung kombiniert.