SkillGridInformatik durch Machen lernen

Eine Tabelle ist eine Menge von Zeilen: dein erstes SELECT

Triff eine winzige Kantinentabelle und die drei Klauseln, mit denen jede Abfrage beginnt: SELECT, FROM, WHERE.

13 Min. · 40 XP

Die Schulkantine verkauft vier Dinge und notiert jeden Tag, wie viel davon verkauft wurde. In einer Datenbank ist dieses Protokoll eine Tabelle: Jede Zeile ist ein Artikel, jede Spalte ist eine Tatsache darüber. Die Tabelle heißt sales, und du wirst ihr den ganzen Unterricht lang Fragen stellen.

sales
+----+----------+-------+--------+
| id | item     | price | count  |
+----+----------+-------+--------+
| 1  | soup     | 2.50  | 40     |
| 2  | sandwich | 3.20  | 55     |
| 3  | salad    | 2.80  | 23     |
| 4  | juice    | 1.90  | 60     |
+----+----------+-------+--------+Die Tabelle sales der Kantine: eine Zeile pro Artikel.

Mengen kennst du bereits aus dem Logik-Modul — und eine Tabelle ist eine Menge im Versteck: Zeilen sind ihre Elemente, und zwei gleiche Zeilen gibt es nicht. Der Tabelle eine Frage zu stellen bedeutet, aus ihr eine neue Menge zu berechnen. SQL ist die Sprache dieser Fragen — Structured Query Language, und jedes Wort in diesem Namen ist ernst gemeint.

Eine Abfrage ist ein Satz mit fester Wortstellung. SELECT sagt, welche Spalten bleiben, FROM nennt die Tabelle, WHERE filtert Zeilen. Diese Reihenfolge ändert sich nie — obwohl die Datenbank sie gedanklich in einer anderen Reihenfolge ausführt: erst FROM, dann WHERE, und SELECT ganz am Ende.

SELECT count, item
FROM   sales
WHERE  price < 3.00Behalte die Spalten count und item aus sales, aber nur Zeilen, wo der Preis unter 3.00 liegt.

Lies eine Abfrage als kleine Pipeline. FROM liefert die ganze Tabelle. WHERE wirft jede Zeile raus, die die Bedingung nicht erfüllt. SELECT behält die gefragten Spalten und verwirft den Rest. Hier überstehen Suppe und Salat den Filter, und nur ihre zwei Spalten erreichen das Ergebnis.

sales          4 rows
   |
   +-- WHERE price < 3.00 --> soup (2.50), salad (2.80)
   |
   +-- SELECT count, item   --> soup: 40, salad: 23
   |
   +-- result               2 rowsDieselbe Abfrage, gezeichnet als Pipeline über vier Zeilen.

Beachte, was zurückkam: kein Satz, keine Zahl — eine kleinere Tabelle. Zwei Zeilen, zwei Spalten. Jede SQL-Antwort ist selbst wieder eine Tabelle, das heißt, du kannst weiterfragen und eine Antwort in die nächste Frage füttern.

Praxis

  1. Die Kantinenleitung fragt: Was haben wir heute überhaupt verkauft? Welche Abfrage beantwortet diese Frage an die Tabelle sales?

    Hinweise
    • Die Frage ist, welche Artikel verkauft wurden — nicht nach Preisen oder ids.
    • Eine Spalte wählt SELECT; die Tabelle nennt FROM.
  2. Schreibe eine Abfrage, die die Namen der Gerichte zeigt, die mehr als 2.90 Euro kosten: welche Spalte, aus welcher Tabelle, und welche Zeilen bleiben.

    Hinweise
    • Schreibe die Klauseln in dieser Reihenfolge: SELECT, dann FROM, dann WHERE.
    • Du brauchst die Spalte item aus der Tabelle sales, also: SELECT item FROM sales.
    • Die Bedingung vergleicht price mit der Zahl: WHERE price > 2.90.