Zum Inhalt
Alle Apps

Unterabfragen-Werkstatt: NULL, Kürzel, union, Unterabfrage

Über diese App

Fünf Blitzlichter an der Übungsdatenbank prodat: 17 von 46 Lieferungen ohne Wert, sum(days)/count(*) = 12 gegen avg(days) = 20,55; Tabellenkürzel c und o, die nach dem Statement verpuffen, und dasselbe Statement mit join und on; union als Vereinigungsmenge {1, 2, 3} ∪ {1, 3, 5} und an X und Y (7 Werte, union all 10); die Kunden aus Hamburg als Unterabfrage im where (2 Kundennummern, 4 Bestellzeilen, gleich dem Join) und eine Unterabfrage im from mit Namen T.

Mit Erklärmodus: Ein KI-Tutor führt dich durch die App, zeigt in der Szene, worauf es ankommt, und beantwortet deine Fragen.

Eine Abfrage liefert wieder eine Tabelle

Das Ergebnis jeder SQL-Abfrage ist eine Tabelle. Deshalb darf man eine Abfrage in eine andere einsetzen: im WHERE als Menge hinter IN, gelesen als „ist Element von“, oder im FROM als Ad-hoc-Tabelle, die einen Namen braucht. UNION vereinigt zwei Ergebnisse und entfernt Doppelte, UNION ALL behält sie. Tabellen-Aliase wie customers c kürzen ein Statement und gelten nur in diesem einen Statement. Bei Durchschnitten zählt NULL nicht mit: avg ignoriert fehlende Werte, count(*) nicht.

Was die App zeigt

Fünf Szenen auf der Übungsdatenbank prodat: 46 Lieferungen, von denen 17 keinen Wert haben, mit sum(days)/count(*) = 12 gegen avg(days) = 20,55; ein Join-Statement, dessen Tabellennamen auf c und o schrumpfen, mit dem Fehler no such column im nächsten Statement; zwei Mengen und zwei Spalten, die in einen Topf fallen, wobei die Doppelten herausfliegen; die Kunden aus Hamburg als innere Abfrage, deren zwei Kundennummern vier Bestellungen finden, genau wie der Join; und die Tabelle T aus 184 Bestellzeilen, von der where total >= 30 zehn Zeilen übrig lässt.

Selbst ausprobieren

Wähle eine Szene und geh die Schritte durch: Rechne den Durchschnitt mit und ohne NULL, kürze die Tabellennamen, ersetze das Komma durch join, wirf die Mengen in den Topf, lass die innere Abfrage laufen und baue T aus der Tabelle orders. Die Zahlen im Panel zeigen jeweils Zeilen, Zeichen, Elemente und Treffer.

Häufige Fragen

Was ist eine Unterabfrage in SQL?
Eine Abfrage innerhalb einer anderen. Im WHERE liefert sie eine Menge von Werten, etwa alle Kundennummern aus Hamburg, und die äußere Abfrage prüft mit IN, ob ein Wert darin vorkommt. Im FROM liefert sie eine Tabelle, die einen Alias braucht, zum Beispiel (select …) T.
Was ist der Unterschied zwischen UNION und UNION ALL?
UNION vereinigt die Ergebnisse zweier Abfragen und entfernt doppelte Zeilen, wie die Vereinigungsmenge {1, 2, 3} ∪ {1, 3, 5} = {1, 2, 3, 5}. UNION ALL hängt die Ergebnisse nur aneinander und behält Doppelte. Beide Teilabfragen brauchen gleich viele Spalten.
Warum ist sum/count(*) nicht dasselbe wie avg?
count(*) zählt alle Zeilen, auch solche mit NULL, avg teilt nur durch die Zahl der bekannten Werte. In SQLite kommt hinzu, dass die Division zweier ganzer Zahlen abschneidet: 596 / 46 ergibt 12, avg(days) dagegen 596 / 29 = 20,55.
Was kann ich in der App ausprobieren?
Fünf Szenen mit Schritten: NULL im Durchschnitt, Tabellen-Aliase mit join und on, UNION und UNION ALL an Mengen und Tabellen, eine Unterabfrage im WHERE mit dem gleichwertigen Join und eine Unterabfrage im FROM. Ein Erklärmodus führt durch alles.

Fach: Informatik

Mehr aus Informatik

Eine VisuApp von heyprof: interaktiv, kostenlos im Browser, ohne Anmeldung. Was ist eine VisuApp? · Alle Apps