Datenbanken – Tabellen, Sortieren und Filtern
Deine Schule hat 600 Schülerinnen und Schüler, die Bibliothek 4.000 Bücher und der Pausenverkauf 30 Produkte. Wie behält man bei so vielen Daten den Überblick? Und wie findet man in Sekunden alle Schüler der Klasse 9b, ohne eine Liste Zeile für Zeile durchzulesen? Genau dafür gibt es Datenbanken.
Aufbau einer Tabelle
Eine Datenbank speichert Daten strukturiert in Tabellen. Das kennst du schon aus der Tabellenkalkulation. Hier sind die Fachbegriffe:
Beispiel: die Tabelle „Schüler“.
| ID | Name | Klasse | Geburtsjahr |
|---|---|---|---|
| 1 | Mia Becker | 9a | 2010 |
| 2 | Can Yilmaz | 9b | 2009 |
| 3 | Jonas Weber | 9b | 2010 |
| 4 | Mia Becker | 9c | 2009 |
Die Tabelle hat 4 Datensätze und 4 Felder. Beachte: Es gibt zwei Schülerinnen namens „Mia Becker“. Woran unterscheidet man sie?
Der Name taugt nicht: Zwei Personen können gleich heißen, außerdem kann sich ein Name ändern. Deshalb vergibt man eine künstliche ID (1, 2, 3, …) oder eine Nummer wie die Schülernummer. Die Klasse oder das Geburtsjahr taugen auch nicht, weil viele dieselben Werte haben.
Eine Schuldatenbank hat die Tabelle „Schüler“ mit den Spalten ID, Name, Klasse, Geburtsjahr. Erkläre die Begriffe Datensatz, Feld (Attribut) und Primärschlüssel anhand…
Eine Schuldatenbank hat die Tabelle „Schüler“ mit den Spalten ID, Name, Klasse, Geburtsjahr. Erkläre die Begriffe Datensatz, Feld (Attribut) und Primärschlüssel anhand dieser Tabelle.
Warum ist der Name allein kein guter Primärschlüssel für die Tabelle „Schüler“? Nenne ein besseres Beispiel für einen Primärschlüssel.
Warum ist der Name allein kein guter Primärschlüssel für die Tabelle „Schüler“? Nenne ein besseres Beispiel für einen Primärschlüssel.
Sortieren und Filtern
Zwei Grundoperationen verändern nicht die Daten selbst, sondern nur deine Sicht darauf:
-
Sortieren ordnet die Datensätze nach einem Feld: aufsteigend (kleinste Zahl bzw. A zuerst) oder absteigend. Bei Gleichstand kann ein zweites Feld entscheiden.
-
Filtern zeigt nur die Datensätze, die eine Bedingung erfüllen. Mehrere Bedingungen verknüpfst du mit UND (beide müssen stimmen) oder ODER (mindestens eine muss stimmen).
Das sind dieselben logischen Operationen wie bei WENN, UND und ODER in der Tabellenkalkulation.
Gegeben ist die Tabelle „Buch“: | ID | Titel | Autor | Jahr | |---|---|---|---| | 1 | Emil und die Detektive | Kästner | 1929 | | 2 | Momo | Ende | 1973 | | 3 | Krabat |…
Gegeben ist die Tabelle „Buch“:
| ID | Titel | Autor | Jahr |
|---|---|---|---|
| 1 | Emil und die Detektive | Kästner | 1929 |
| 2 | Momo | Ende | 1973 |
| 3 | Krabat | Preußler | 1971 |
| 4 | Die unendliche Geschichte | Ende | 1979 |
- a) Sortiere die Tabelle aufsteigend nach Jahr und gib die ID-Reihenfolge an.
- b) Filtere alle Bücher von Ende und gib die Titel an.
Gegeben ist die Tabelle „Film“: | ID | Titel | Genre | Dauer (min) | |---|---|---|---| | 1 | Die Welle | Drama | 107 | | 2 | Tschick | Komödie | 93 | | 3 | Das Wunder…
Gegeben ist die Tabelle „Film“:
| ID | Titel | Genre | Dauer (min) |
|---|---|---|---|
| 1 | Die Welle | Drama | 107 |
| 2 | Tschick | Komödie | 93 |
| 3 | Das Wunder von Bern | Drama | 118 |
| 4 | Fack ju Göhte | Komödie | 118 |
- a) Filtere alle Filme mit Genre „Drama“ und Dauer unter 110 Minuten.
- b) Sortiere die ganze Tabelle absteigend nach Dauer, bei gleicher Dauer alphabetisch nach Titel. Gib die ID-Reihenfolge an.
SQL-Abfragen
Datenbanksysteme verstehen die Abfragesprache SQL. Du beschreibst darin, was du haben willst. Eine einfache Abfrage hat diese Form:
SELECT Spalten
FROM Tabelle
WHERE Bedingung
ORDER BY Feld ASC;
| Teil | Bedeutung |
|---|---|
SELECT |
Welche Felder sollen angezeigt werden? * heißt: alle |
FROM |
Aus welcher Tabelle kommen die Daten? |
WHERE |
Filter: nur Datensätze, die die Bedingung erfüllen |
ORDER BY |
Sortierung: ASC aufsteigend, DESC absteigend |
Vergleiche schreibst du mit =, <> (ungleich), <, <=, >, >=. Bedingungen verknüpfst du mit AND, OR und NOT. Text steht in einfachen Anführungszeichen: '9b'. Am Ende steht ein Semikolon.
Die Syntax ist wichtig: Fehlt ein Wort oder ein Anführungszeichen, meldet das System eine Fehlermeldung. Die Semantik bestimmt, welche Datensätze herauskommen.
Zwei Bedingungen verbindest du so:
SELECT Name FROM Schüler WHERE Klasse = '9a' OR Klasse = '9c';
Gegeben ist die SQL-Abfrage: SELECT Titel FROM Film WHERE Genre = 'Komödie' ORDER BY Dauer ASC; a) Erkläre, was jeder Teil der Abfrage bewirkt. b) Welches Ergebnis…
Gegeben ist die SQL-Abfrage:
SELECT Titel FROM Film WHERE Genre = 'Komödie' ORDER BY Dauer ASC;
- a) Erkläre, was jeder Teil der Abfrage bewirkt.
- b) Welches Ergebnis liefert sie für die Tabelle aus der vorigen Aufgabe (Film)?
Schreibe SQL-Abfragen für die Tabelle „Schüler“ (ID, Name, Klasse, Geburtsjahr): a) Alle Namen der Schüler aus der Klasse '9b'. b) Alle Schüler, die nach 2009 geboren…
Schreibe SQL-Abfragen für die Tabelle „Schüler“ (ID, Name, Klasse, Geburtsjahr):
- a) Alle Namen der Schüler aus der Klasse '9b'.
- b) Alle Schüler, die nach 2009 geboren sind, absteigend sortiert nach Geburtsjahr.
- c) Alle Datensätze, deren Klasse '9a' oder '9c' ist.
Gegeben ist die Tabelle „Sportler“: | ID | Name | Disziplin | Punkte | |---|---|---|---| | 1 | Maja | Weitsprung | 410 | | 2 | Tim | Sprint | 385 | | 3 | Lea |…
Gegeben ist die Tabelle „Sportler“:
| ID | Name | Disziplin | Punkte |
|---|---|---|---|
| 1 | Maja | Weitsprung | 410 |
| 2 | Tim | Sprint | 385 |
| 3 | Lea | Weitsprung | 450 |
| 4 | Ali | Sprint | 450 |
| 5 | Jan | Weitsprung | 385 |
- a) Schreibe eine SQL-Abfrage, die Name und Punkte aller Sportler mit mindestens 400 Punkten liefert, nach Punkten absteigend sortiert (bei gleicher Punktzahl ist die Reihenfolge beliebig).
- b) Gib das Ergebnis der Abfrage an.
- c) Schreibe eine Abfrage, die alle Weitsprung-Sportler mit weniger als 420 Punkten liefert, und gib das Ergebnis an.
Mehrere Tabellen und Datenbanksysteme
Die Bibliothek speichert alles in einer Tabelle:
| Schülername | Klasse | Buchtitel | Autor | Ausleihdatum |
|---|---|---|---|---|
| Lea Koch | 9a | Momo | Ende | 03.05. |
| Lea Koch | 9a | Krabat | Preußler | 03.05. |
| Lea Koch | 9a | Tschick | Herrndorf | 10.05. |
Probleme:
-
Redundanz: Name und Klasse von Lea stehen dreimal da, ebenso Titel und Autor jedes Buchs bei jeder Ausleihe.
-
Änderungsanomalie: Wechselt Lea in die 9b, muss man alle Zeilen ändern. Vergisst man eine, widersprechen sich die Daten.
Die Lösung: Daten auf mehrere Tabellen aufteilen und sie über Schlüssel verknüpfen.
| Tabelle | Felder |
|---|---|
| Schüler | SchülerID (Primärschlüssel), Name, Klasse |
| Buch | BuchID (Primärschlüssel), Titel, Autor |
| Ausleihe | AusleiheID (Primärschlüssel), SchülerID (Fremdschlüssel), BuchID (Fremdschlüssel), Datum |
Ein Fremdschlüssel ist ein Feld, das auf den Primärschlüssel einer anderen Tabelle verweist. So steht jede Angabe nur einmal in der Datenbank.
Warum nutzt man dafür ein Datenbanksystem statt einer Tabellenkalkulation? Es bietet:
-
Mehrbenutzerbetrieb: Viele Personen arbeiten gleichzeitig an denselben Daten, ohne sich zu überschreiben.
-
Sehr große Datenmengen werden schnell durchsucht.
-
Konsistenz: Regeln wie „ID ist eindeutig“ werden automatisch geprüft.
-
Zugriffsrechte: Nicht jeder darf alles sehen oder ändern (Datenschutz).
Außerdem sind in einem Datenbanksystem die Daten und ihre Darstellung getrennt. Das Sortieren und Filtern ist eine Abfrage, die die gespeicherten Daten nicht verändert. Du musst sie nicht jedes Mal von Hand neu ordnen, sondern das System liefert bei jeder Abfrage das passende Ergebnis.
Die Bibliothek der Realschule verwaltet Ausleihen in einer einzigen Tabelle mit den Spalten: Schülername, Klasse, Buchtitel, Autor, Ausleihdatum. a) Beschreibe zwei…
Die Bibliothek der Realschule verwaltet Ausleihen in einer einzigen Tabelle mit den Spalten: Schülername, Klasse, Buchtitel, Autor, Ausleihdatum.
- a) Beschreibe zwei Probleme (Redundanz, Änderungsanomalie), die entstehen, wenn ein Schüler mehrere Bücher ausleiht.
- b) Schlage eine Aufteilung in drei Tabellen vor und gib Primär- und Fremdschlüssel an.
Eine Tabelle „Produkt“ eines Schulkiosks enthält ID, Name, Preis (in €) und Bestand. a) Formuliere eine SQL-Abfrage für alle Produkte, die weniger als 2 € kosten und von…
Eine Tabelle „Produkt“ eines Schulkiosks enthält ID, Name, Preis (in €) und Bestand.
- a) Formuliere eine SQL-Abfrage für alle Produkte, die weniger als 2 € kosten und von denen weniger als 10 Stück da sind (nur Name und Bestand, sortiert nach Bestand aufsteigend).
- b) Der Hausmeister meint: „Man kann in einer Tabellenkalkulation dasselbe machen, ein Datenbanksystem braucht man nicht.“ Nenne zwei Vorteile eines Datenbanksystems, wenn viele Personen gleichzeitig mit sehr vielen Daten arbeiten.
- c) Erkläre, warum man die gespeicherten Daten in einem Datenbanksystem nicht jedes Mal selbst umsortieren muss, um sie in einer bestimmten Reihenfolge anzuzeigen.
Zurück zum Anfang: Die Schüler der 9b findest du mit SELECT * FROM Schüler WHERE Klasse = '9b';. Das System liest nicht Zeile für Zeile von Hand, du beschreibst nur, was du suchst.