Sortieren, Filtern und Abfrageergebnisse
Im Ruhrgebiet gibt es Hunderte von Kinos. Du suchst einen Film, der nach 2015 erschienen ist, nicht länger als zwei Stunden dauert und dessen Titel du alphabetisch geordnet sehen willst. Eine Datenbank nimmt dir diese Arbeit ab, wenn du ihr die richtige Abfrage stellst. Wie formuliert man so eine Abfrage, und was kommt dabei heraus?
Sortieren
Eine Tabelle besteht aus Datensätzen (Zeilen) und Attributen (Spalten). Beim Sortieren ordnest du die Datensätze nach den Werten eines Attributs. Die Datensätze selbst bleiben dabei unverändert, nur die Reihenfolge ändert sich.
-
aufsteigend: vom kleinsten zum größten Wert (Zahlen) bzw. von A bis Z (Text)
-
absteigend: vom größten zum kleinsten Wert bzw. von Z bis A
Bei Gleichstand (zwei Datensätze haben denselben Wert) legst du ein zweites Sortierkriterium fest. Beispiel: „absteigend nach Punkte, bei Gleichstand aufsteigend nach Name“.
Gegeben ist die Tabelle „Film“: | Titel | Jahr | Dauer (min) | |-------|------|-------------| | Alpha | 2015 | 95 | | Beta | 2019 | 120 | | Gamma | 2012 | 88 | | Delta |…
Gegeben ist die Tabelle „Film“:
| Titel | Jahr | Dauer (min) |
|---|---|---|
| Alpha | 2015 | 95 |
| Beta | 2019 | 120 |
| Gamma | 2012 | 88 |
| Delta | 2021 | 105 |
- a) Sortiere die Tabelle aufsteigend nach Jahr.
- b) Sortiere sie absteigend nach Dauer.
- c) Welche Filme bleiben übrig, wenn nach Dauer > 100 gefiltert wird?
Filtern mit Bedingungen
Beim Filtern bleiben nur die Datensätze übrig, die eine Bedingung erfüllen. Die anderen werden im Ergebnis nicht angezeigt (in der Tabelle selbst bleiben sie erhalten). Eine Bedingung hat die Form Attribut – Vergleichsoperator – Wert.
| Operator | Bedeutung | Beispiel |
|---|---|---|
= |
gleich | Art = „Hund“ |
<> (oder ≠) |
ungleich | Art <> „Hund“ |
<, > |
kleiner, größer | Alter > 5 |
<=, >= |
höchstens, mindestens | Alter >= 5 |
Mehrere Bedingungen verknüpfst du mit UND und ODER:
-
UND: Beide Bedingungen müssen gelten. Das Ergebnis wird kleiner.
-
ODER: Mindestens eine Bedingung muss gelten. Das Ergebnis wird größer.
Das sind die logischen Operatoren, die du schon von Schaltungen und aus der Programmierung kennst (&&, ||).
Gegeben ist die Tabelle „Tiere“ mit den Datensätzen (Name, Art, Alter): (Rex, Hund, 5), (Mimi, Katze, 3), (Bello, Hund, 8), (Luna, Katze, 8), (Hoppel, Hase, 2). a)…
Gegeben ist die Tabelle „Tiere“ mit den Datensätzen (Name, Art, Alter): (Rex, Hund, 5), (Mimi, Katze, 3), (Bello, Hund, 8), (Luna, Katze, 8), (Hoppel, Hase, 2).
- a) Filtere alle Hunde.
- b) Filtere alle Tiere mit Alter ≥ 5.
- c) Filtere alle Katzen, die älter als 5 Jahre sind.
Eine Tabelle enthält die Zeilen (Name, Stadt, Punkte): (Anna, Bonn, 80), (Ben, Köln, 95), (Cem, Bonn, 95), (Dora, Köln, 70), (Emil, Bonn, 60). a) Sortiere zuerst…
Eine Tabelle enthält die Zeilen (Name, Stadt, Punkte): (Anna, Bonn, 80), (Ben, Köln, 95), (Cem, Bonn, 95), (Dora, Köln, 70), (Emil, Bonn, 60).
- a) Sortiere zuerst absteigend nach Punkten und bei Gleichstand aufsteigend nach Name.
- b) Filtere alle Teilnehmer aus Bonn mit mindestens 70 Punkten.
- c) Gib an, wie viele Datensätze das Ergebnis aus b) hat und wie hoch der Durchschnitt der Punkte darin ist.
Abfragen formulieren und lesen
Eine Abfrage beschreibt, was du aus der Datenbank haben möchtest. Sie besteht aus drei Teilen:
-
Anzeigen: Welche Attribute sollen im Ergebnis stehen? (Projektion)
-
Filtern: Welche Datensätze sollen erscheinen? (Bedingung)
-
Sortieren: In welcher Reihenfolge? (auf- oder absteigend)
Beispiel in Worten: „Zeige Titel und Jahr aller Filme mit Dauer über 100 Minuten, sortiert nach Jahr aufsteigend.“
-
Angezeigt werden: Titel, Jahr
-
Gefiltert wird nach: Dauer (> 100)
-
Sortiert wird nach: Jahr (aufsteigend)
Beachte: Das Attribut, nach dem du filterst, muss nicht angezeigt werden. Im Ergebnis fehlt dann die Dauer, obwohl sie die Auswahl bestimmt hat.
Ergebnisse rückwärts lesen: Aus einem Ergebnis kannst du nur auf mögliche Filter und Sortierungen schließen. Siehst du nur die Klassen 10a und 10b mit Note 1 und 2, könnte der Filter „Note < 3“ gewesen sein. Über die Datensätze, die nicht erscheinen, sagt das Ergebnis nichts aus, etwa wie viele Schüler es insgesamt gibt.
Auch Auswertungen lassen sich am Ergebnis ablesen: Anzahl der Datensätze, Summe oder Durchschnitt eines Attributs. Beispiel: Im Ergebnis stehen die Punkte 80 und 95. Zwei Datensätze, Durchschnitt $(80 + 95) : 2 = 87{,}5$.
Eine Abfrage lautet in Worten: „Zeige Name und Klasse aller Schüler der Klasse 10a, sortiert nach Name.“ a) Welche Attribute werden angezeigt? b) Nach welchem Attribut…
Eine Abfrage lautet in Worten: „Zeige Name und Klasse aller Schüler der Klasse 10a, sortiert nach Name.“
- a) Welche Attribute werden angezeigt?
- b) Nach welchem Attribut wird gefiltert, nach welchem sortiert?
- c) Wie ändert sich das Ergebnis, wenn zusätzlich absteigend sortiert wird?
Die Tabelle „Produkt“ eines Elektronikmarkts enthält: (Laptop, 699 €, 12 Stück), (Maus, 19,90 €, 85 Stück), (Monitor, 189 €, 0 Stück), (Tastatur, 34,50 €, 40 Stück),…
Die Tabelle „Produkt“ eines Elektronikmarkts enthält: (Laptop, 699 €, 12 Stück), (Maus, 19,90 €, 85 Stück), (Monitor, 189 €, 0 Stück), (Tastatur, 34,50 €, 40 Stück), (Headset, 59 €, 0 Stück).
- a) Formuliere eine Abfrage, die alle lieferbaren Produkte (Bestand > 0) nach Preis aufsteigend zeigt, und gib das Ergebnis an.
- b) Formuliere eine Abfrage für alle Produkte mit Preis unter 60 € und Bestand über 50 und gib das Ergebnis an.
- c) Der Chef möchte wissen, welche Produkte nachbestellt werden müssen. Beschreibe die passende Abfrage.
Das Ergebnis einer Abfrage auf die Tabelle „Schueler“ lautet: | Name | Klasse | Note | |------|--------|------| | Klein | 10a | 1 | | Brandt | 10a | 2 | | Yilmaz | 10b |…
Das Ergebnis einer Abfrage auf die Tabelle „Schueler“ lautet:
| Name | Klasse | Note |
|---|---|---|
| Klein | 10a | 1 |
| Brandt | 10a | 2 |
| Yilmaz | 10b | 2 |
- a) Welche Bedingung könnte die Abfrage enthalten haben (Filter)?
- b) Nach welchem Attribut wurde wahrscheinlich sortiert? Gib zwei Möglichkeiten an.
- c) Kann man aus dem Ergebnis sagen, wie viele Schüler es insgesamt gibt? Begründe.
UND, ODER und Klammern
Bei gemischten Bedingungen gilt wie in der Mathematik „Punkt vor Strich“: UND bindet stärker als ODER. Ohne Klammern wird zuerst das UND ausgewertet.
Aufgabe: „Schüler der 10a oder 10b mit Note besser als 3.“
-
Abfrage A: Klasse = 10a ODER Klasse = 10b UND Note < 3. Gelesen wie: Klasse = 10a ODER (Klasse = 10b UND Note < 3). Alle Schüler der 10a erscheinen, auch mit Note 5.
-
Abfrage B: (Klasse = 10a ODER Klasse = 10b) UND Note < 3. Das ist das Gewünschte.
Zwei Mitschüler formulieren Abfragen für „alle Schüler der Klasse 10a oder 10b mit Note besser als 3“. Abfrage A: Klasse = 10a ODER Klasse = 10b UND Note < 3. Abfrage B:…
Zwei Mitschüler formulieren Abfragen für „alle Schüler der Klasse 10a oder 10b mit Note besser als 3“. Abfrage A: Klasse = 10a ODER Klasse = 10b UND Note < 3. Abfrage B: (Klasse = 10a ODER Klasse = 10b) UND Note < 3.
- a) Erkläre, warum die beiden Abfragen unterschiedliche Ergebnisse liefern können (UND bindet stärker als ODER).
- b) Gib ein Beispiel für einen Datensatz, der nur in Abfrage A erscheint.
- c) Welche Abfrage entspricht der Aufgabe? Begründe.
Berechnungen und mehrere Tabellen
Manche Werte musst du nicht speichern, sondern kannst sie in der Abfrage berechnen. Beim Fahrradverleih ergeben sich die Gesamtkosten aus Tage · Preis pro Tag, zum Beispiel $3 \cdot 25\,€ = 75\,€$. Würde man sie zusätzlich speichern, entstünde Redundanz: Ändert sich der Preis, passen die gespeicherten Gesamtkosten nicht mehr. Berechnete Werte werden deshalb besser bei jeder Abfrage neu berechnet.
Für Summen pro Gruppe (zum Beispiel pro Kunde) bildest du Gruppen und addierst die Werte jeder Gruppe.
Oft sind Daten auf mehrere Tabellen verteilt. Eine Tabelle verweist auf eine andere über einen Fremdschlüssel: Er ist ein Attribut, das den Primärschlüssel der anderen Tabelle enthält.
In „Kunde“ ist KID der Primärschlüssel (eindeutig pro Kunde). In „Bestellung“ ist KID der Fremdschlüssel: Er sagt, zu welchem Kunden die Bestellung gehört.
Ein Fahrradverleih in Aachen führt die Tabelle „Verleih“ (Rad, Kunde, Tage, Preis pro Tag): (E-Bike, Weber, 3, 25 €), (Trekking, Weber, 2, 12 €), (E-Bike, Koch, 1, 25…
Ein Fahrradverleih in Aachen führt die Tabelle „Verleih“ (Rad, Kunde, Tage, Preis pro Tag): (E-Bike, Weber, 3, 25 €), (Trekking, Weber, 2, 12 €), (E-Bike, Koch, 1, 25 €), (Mountainbike, Schmidt, 4, 15 €), (Trekking, Koch, 5, 12 €).
- a) Formuliere eine Abfrage, die alle Verleihvorgänge mit Gesamtkosten (Tage · Preis pro Tag) über 50 € liefert, und gib das Ergebnis an.
- b) Wie könnte man die Gesamtkosten pro Kunde ermitteln? Berechne sie.
- c) Begründe, warum Gesamtkosten besser nicht als eigenes Attribut gespeichert werden.
Zwei Tabellen: „Kunde“ (KID, Name, Ort): (1, Weber, Essen), (2, Koch, Bochum), (3, Schmidt, Essen); „Bestellung“ (BID, KID, Betrag): (10, 1, 40 €), (11, 3, 25 €), (12,…
Zwei Tabellen: „Kunde“ (KID, Name, Ort): (1, Weber, Essen), (2, Koch, Bochum), (3, Schmidt, Essen); „Bestellung“ (BID, KID, Betrag): (10, 1, 40 €), (11, 3, 25 €), (12, 1, 15 €), (13, 2, 60 €).
- a) Welche Rolle spielt KID in der Tabelle „Bestellung“?
- b) Beschreibe eine Abfrage, die Name und Betrag aller Bestellungen von Kunden aus Essen zeigt, und gib das Ergebnis an.
- c) Berechne den Gesamtumsatz pro Kunde und erkläre, welche Information aus beiden Tabellen dafür verbunden werden muss.
Zurück zum Anfang: Die Kinosuche ist eine Abfrage mit Filter (Jahr > 2015 UND Dauer <= 120), Sortierung (nach Titel aufsteigend) und ausgewählten Attributen. Die Datenbank liefert genau diese Datensätze.