SQL-Fließband: Die Maschine liest anders
Über diese App
Geschrieben SELECT … ORDER BY, ausgeführt FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY: Die Klauseln springen in die Ausführungsreihenfolge, die Tools-Tabelle läuft Station für Station durchs Band (Zeilen, Fächer, Gruppenwerte, Alias). Dazu die typischen Fehler Alias in WHERE und Gruppenbedingung in WHERE.
Mit Erklärmodus: Ein KI-Tutor führt dich durch die App, zeigt in der Szene, worauf es ankommt, und beantwortet deine Fragen.
Geschrieben und ausgeführt
Eine SQL-Abfrage schreibt man in der Reihenfolge SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY. Die Datenbank wertet sie logisch anders aus: Zuerst holt FROM die Tabelle, WHERE prüft jede Zeile einzeln, GROUP BY bildet Gruppen, HAVING prüft die Gruppen, erst dann berechnet SELECT die Ergebnisspalten und vergibt Aliasnamen, und ORDER BY sortiert zum Schluss. Jede Station arbeitet mit dem Zwischenergebnis der vorigen. Daraus folgt, warum ein Alias aus SELECT in WHERE noch nicht existiert, in ORDER BY aber schon.
Was die App zeigt
Links stehen die sechs Klauseln einer Abfrage auf der Tabelle tools. Ein Umschalter lässt sie in die Ausführungsreihenfolge springen; SELECT wandert von Platz 1 an Platz 5. Rechts läuft das Zwischenergebnis durch das Band: fünf Zeilen nach FROM, vier nach WHERE price > 400, drei Fächer nach GROUP BY tag, zwei nach HAVING avg(price) > 450 und am Ende zwei Ergebniszeilen, B mit 561.5 vor A mit 540.0. Aussortiertes landet sichtbar in einer Ablage.
Selbst ausprobieren
Lass das Band Station für Station laufen oder tippe auf eine Klausel. Wähle eine zweite Abfrage mit count(*) > 1 oder das Beispiel von der Folie. Setze einen typischen Fehler ein, etwa den Alias avg_price in WHERE: Das Band bleibt an WHERE stehen, und das Ergebnis-Panel zeigt die Meldungen von PostgreSQL und SQLite.
Häufige Fragen
- In welcher Reihenfolge führt SQL eine Abfrage aus?
- Logisch in der Reihenfolge FROM (mit JOIN), WHERE, GROUP BY, HAVING, SELECT, ORDER BY und zuletzt LIMIT. Geschrieben wird SELECT zuerst. Ein Optimierer darf intern anders vorgehen, das Ergebnis muss aber dieser logischen Reihenfolge entsprechen.
- Was ist der Unterschied zwischen WHERE und HAVING?
- WHERE filtert einzelne Zeilen, bevor gruppiert wird. HAVING filtert Gruppen, nachdem GROUP BY sie gebildet hat. Bedingungen mit Aggregatfunktionen wie count(*) > 1 oder avg(price) > 450 gehören deshalb in HAVING.
- Warum kann ich einen Alias aus SELECT nicht in WHERE verwenden?
- WHERE wird vor SELECT ausgewertet, der Alias existiert dort noch nicht. PostgreSQL meldet dann column does not exist. ORDER BY läuft nach SELECT und darf den Alias benutzen. SQLite löst einen Alias ohne Aggregatfunktion in WHERE als Erweiterung auf.
- Was kann ich in der App ausprobieren?
- Du schaltest zwischen geschriebener und ausgeführter Reihenfolge um, lässt die Tabelle Station für Station durchlaufen, wählst zwischen drei Abfragen und setzt typische Fehler ein, an denen das Band stehen bleibt.
Fach: Informatik
Mehr aus Informatik
- Ackermann-Funktion
- Aufzug-Simulator
- Binär-Werkstatt
- Binäre vs. lineare Suche
- Collatz-Problem (3n+1)
- CPU-Innenleben
- Das Innere austauschen
- Ein Frame in 16 Millisekunden — wie eine Game-Engine ein Bild rechnet (3D)
Eine VisuApp von heyprof: interaktiv, kostenlos im Browser, ohne Anmeldung. Was ist eine VisuApp? · Alle Apps