|
SQL unterstützt auch Konstrukte, die mit der ursprünglichen relationalen Algebra wenig bis gar nichts zu tun haben. So besitzt eine Menge per Definition keine Ordnung. Mittels des Konstrukts „ORDER BY“ kann man jedoch eine Ordnung auf der Ergebnisrelation definieren. Die Schlüsselwörter „ASC“ und „DESC“ bezeichnen aufsteigende- resp. absteigende Anordung der Werte im Resultat. Wird keines dieser Schlüsselwörter angegeben, wird standardmässig aufsteigend sortiert.
Alle Kunden werden sortiert nach ihrem Namen (aufsteigend, wobei ASC als Standardeinstellung auch entfallen könnte) und ihrem Vornamen (absteigend, DESC) ausgegeben.
Gruppierungen („GROUP BY“-Klausel) dienen dazu, die Menge aller Tupel einer Relation nach bestimmten Kriterien in Teilmengen zu unterteilen, um für diese Teilmengen bestimmte Statistiken zu berechnen. Als Gruppierungskriterium dienen die Werte eines bestimmten Attributs. Alle Tupel, die für dieses Attribut den gleichen Wert besitzen, werden zu einer Gruppe zusammengefasst. Diese Gruppen können dann weiter bearbeitet werden (im Spezialfall auch durch eine weitere Gruppierung, um Gruppen von Gruppen zu bearbeiten etc.). Dazu dienen sogenannte Aggregatfunktionen, die nur auf numerische Attribute angewendet werden können. Folgende Aggregatfunktionen stehen üblicherweise zur Verfügung:
min
zum Bestimmen des minimalen Werts eines
Attributs
max
zum Bestimmen des maximalen Werts eines
Attributs
sum
zum Berechnen der Summe der selektierten Werte
eines Attributs
count
zeigt die Anzahl der selektierten Werte eines Attributs
(nicht der verschiedenen Werte!)
avg
zum Berechnen des Mittelwertes aller selektierten
Werte eines Attributs, wobei NULL-Werte nicht in die Berechnung einfliessen.
Mittels dieser Anfrage werden die Nummern aller Kunden bestimmt, die mit
Kleinanzeigen (Preis des einzelnen Inserats weniger als 300 Franken) schon Inserate
für mehr als 200 Franken in Auftrag gegeben haben. Bei der Bearbeitung dieser
Anfrage wird erst die Restriktion berücksichtigt (A004 wird aussortiert), dann
werden die verbliebenen Tupel gruppiert, und zum Schluss wird geprüft, welche
Tupel, die Gruppen repräsentieren, tatsächlich ausgegeben werden sollen (die
Gruppen der Kunden 002 und 005 werden aussortiert, da sie noch nicht das Limit
erreicht haben).
Anfragen, die eine GROUP BY-Klausel enthalten,
werden folgendermassen abgearbeitet. Zuerst wird die Bedingung im WHERE Teil ausgeführt,
falls eine solche vorhanden ist. Danach wird nach den angegeben Spalten gruppiert.
Mit der Bedingung im HAVING Teil der Anfrage kann anschliessend, falls nötig, noch eine Bedingung für die
gruppierten Attributwerte angegeben werden. Auf Grund dieser Reihenfolge ist ersichtlich,
dass die Bedingung im WHERE Teil der Anfrage keine Aggregatfunktionen enthalten kann,
weil zu diesem Zeitpunkt noch gar nicht gruppiert wurde.
Alle Attribute, die in der Anfrage vorkommen müssen aber trotzdem entweder in der GROUP BY-Klausel
vorkommen oder in einer Aggregatfunktion stehen.