Databases Reference
In-Depth Information
Praktisch alles, was wir bisher über select -Anweisungen gelernt haben, finden
wir in der folgenden Abfrage wieder:
Listing 12.9: Eine Abfrage mit vielen syntaktischen Komponenten
select reihe, count(band)
from alben
where jahr>=1975
group by reihe
having avg(preis)>=5.0
order by count(band) desc
Wir ermitteln alle Reihen, deren nach 1974 erschienenen Alben mindestens einen
Durchschnittspreis von 5.0 haben. Das Ergebnis wird so sortiert, dass Reihen, die
die meisten solcher Alben enthalten, zuerst erscheinen. Interessant ist dabei üb-
rigens auch, dass die Aggregatfunktionen count zwar bei der Projektion und
der Sortierung, nicht aber im having -Teil auftritt. Im order by -Teil muss die
count -Funktion vorhanden sein, beim having -Teil kann sie dabei sein.
Tabelle 12.6: Ergebnis der Abfrage aus Listing 12.9
reihe
count(band)
Franka
2
Asterix
1
Auch wenn wir erst in Kapitel 20 erfahren, wie eine select -Anweisung vom
RDBMS abgearbeitet wird, soll hier auf einen konzeptionellen Unterschied zwi-
schen SQL und vielen anderen Programmiersprachen hingewiesen werden. Wir
sehen, dass wir in der Anweisung aus Listing 12.9 an drei Stellen, nämlich
in der Projektion,
im having und
im order by
die Aggregatfunktion count(band) finden. In einer imperativen Programmier-
sprache würden wir hier zur Leistungssteigerung eine Variable definieren und ihr
count(band) als Teilergebnis zuweisen, damit wir es dann wieder verwenden
können. In SQL ist das weder möglich noch nötig: Das RDBMS sollte erkennen,
dass die Berechnung nur einmal ausgeführt werden muss, und selbstständig mit
Zwischenergebnissen arbeiten. Zumindest in der Theorie ist es vorgesehen, dass
SQL-Anweisungen so verarbeitet werden, dass der Entwickler sich nicht mehr um
ihre Optimierung kümmern muss.
Am Beispiel aus Listing 12.9 sehen wir auch, dass unsere Anweisungen an Um-
fang und Komplexität zunehmen. In dieser Hinsicht ist das Ende der Fahnenstan-
ge aber noch lange nicht erreicht.
 
Search WWH ::




Custom Search