select_ausdruck
::=
SELECT [ALL | DISTINCT]
select_listeFROM
tabellenangabe,...
[WHERE
suchbedingung]
[GROUP BY
spalte,...]
[HAVING
suchbedingung]
select_liste ::= { * | {
tabelle.* |
ausdruck [[AS]
spalte] } }
Für alle Klauseln gilt:
Die angegebene Reihenfolge der Klauseln muss eingehalten werden.
Spaltennamen müssen eindeutig sein. Kommt ein Spaltenname in mehreren Tabellen vor, so müssen Sie den Spaltennamen mit dem Tabellennamen qualifizieren. Wenn Sie eine Tabelle mit einem Korrelationsnamen für die Dauer der SELECT-Anweisung umbenennen (siehe Abschnitt „Tabellenangabe“), dürfen Sie nur noch den Korrelationsnamen verwenden.
Beispiel
SELECT a.knr, l.lsatz
FROM auftrag a, leistung l WHERE a.anr=l.anr
Auswertung von SELECT-Ausdrücken
SELECT-Ausdrücke werden in folgender Reihenfolge ausgewertet:
Aus allen Tabellenangaben in der FROM-Klausel wird das Kartesische Produkt gebildet..
Ist eine WHERE-Klausel angegeben, wird die WHERE-Suchbedingung auf alle Sätze des Kartesischen Produkts angewendet. Es werden die Sätze ausgewählt, für die die Suchbedingung wahr ergibt.
Ist eine GROUP BY-Klausel angegeben, werden die in Punkt 2 bestimmten Sätze zu Gruppen zusammengefasst.
Ist eine HAVING-Klausel angegeben, wird die HAVING-Suchbedingung auf alle Gruppen angewendet. Es werden die Gruppen ausgewählt, die die Suchbedingung erfüllen.
Enthält die SELECT-Liste eine Mengenfunktion und ist die Ergebnistabelle noch nicht gruppiert, werden alle Sätze der Ergebnistabelle zu einer Gruppe zusammengefasst.
Ist die Ergebnistabelle gruppiert (eine oder mehrere Gruppen), wird die SELECT-Liste für jede Gruppe ausgewertet.
Ist die Ergebnistabelle nicht gruppiert, wird die SELECT-Liste für jeden Ergebnissatz ausgewertet.
Die resultierenden Sätze bilden die Ergebnistabelle des SELECT-Ausdrucks.