Mit der SELECT-Liste legen Sie die Spalten der Ergebnistabelle fest.
SELECT [ALL | DISTINCT]
select_liste ...
select_liste ::= { * | {
tabelle .* |
ausdruck [[AS]
spalte ] } } ...
ALL
Doppelte Sätze in der Ergebnistabelle bleiben erhalten.
DISTINCT
Doppelte Sätze werden entfernt.
*
Alle Spalten auswählen. Die Reihenfolge und die Namen der Spalten der in der FROM-Klausel angegebenen Tabellen werden übernommen. Bei mehreren Tabellen gilt die Reihenfolge der Tabellen in der FROM-Klausel. Es muss mindestens eine Spalte geben.
tabelle.*
Alle Spalten der Tabelle tabelle auswählen. Die Tabelle tabelle muss in der FROM-Klausel enthalten sein. Die Reihenfolge und die Namen der Spalten von tabelle werden übernommen. tabelle darf nicht der Korrelationsname für eine Tabellenfunktion DEE() sein.
ausdruck
Ausdruck, der eine Ergebnisspalte bezeichnet. Enthält ausdruck eine Spaltenangabe, muss die Tabelle, zu der die Spalte gehört, in der FROM-Klausel dieses SELECT-Ausdrucks enthalten sein.
Die Namen der Spalten in der SELECT-Liste müssen eindeutig sein. Wenn Sie Tabellen verbinden und diese Basistabellen Spalten mit identischen Namen haben, müssen Sie zur eindeutigen Identifikation die jeweiligen Namen der Tabellen bzw. deren Korrelationsnamen voranstellen.
Ist SELECT DISTINCT angegeben, darf ausdruck nicht aus einer multiplen Spaltenangabe bestehen.
Wenn in einer Spaltenauswahl eine Mengenfunktion (AVG, COUNT, MAX, MIN, SUM) vorkommt, gelten folgende Einschränkungen:
In der SELECT-Liste dürfen nur Spaltennamen vorkommen, die in der GROUP BY-Klausel aufgeführt sind oder Argument einer Mengenfunktion sind.
In derselben Ebene einer SELECT-Abfrage darf nur eine Mengenfunktion mit DISTINCT verwendet werden. Sie dürfen zum Beispiel nicht angeben:
SELECT COUNT(DISTINCT ...) ...SUM(DISTINCT ...) ...
[AS] spalte
Name für die Ergebnisspalte, die mit ausdruck angegeben ist.
Beispiel
SELECT anr AS auftrags_nr, COUNT(*) AS anzahl FROM auftrag GROUP BY anr
|
|
spalte nicht angegeben:
Wenn ausdruck ein Spaltenname ist, erhält die Ergebnisspalte diesen Namen, andernfalls ist der Spaltenname nicht definiert.
Beispiel
SELECT anr, COUNT(*) FROM auftrag GROUP BY anr
|
|
Spalten der Ergebnistabelle
Die Reihenfolge der Spalten in der Ergebnistabelle entspricht der Reihenfolge der Spalten in der SELECT-Liste.
Die Attribute einer Ergebnisspalte (Datentyp, Länge, Genauigkeit, Nachkommastellen) werden entweder von der zugrunde liegenden Spalte übernommen oder ergeben sich aus dem angegebenen Ausdruck.
Eine Ergebnisspalte kann den NULL-Wert liefern, wenn eine der folgenden Bedingungen gilt:
eine der verwendeten Spalten kann den NULL-Wert liefern.
Für Spalten von Tabellenfunktionen ist das immer der Fall. Für Spalten von Basistabellen ist das nur dann nicht der Fall, wenn für die Spalte eine NOT NULL-Bedingung gilt.Der Ausdruck, der die Ergebnisspalte bezeichnet, enthält mindestens einen der folgenden Operanden bzw. Elemente:
eine Indikatorvariable
eine Unterabfrage
die Mengenfunktion AVG, MAX, MIN oder SUM
einen CAST-Ausdruck der Form CAST (NULL AS datentyp)
einen CASE-Ausdruck, der in mindestens einer THEN- bzw. ELSE-Klausel den NULL-Wert enthält
einen CASE-Ausdruck mit NULLIF
einen CASE-Ausdruck mit COALESCE, wobei mindestens ein Operand des COA-LESCE (ausdruck1 ... ausdruckn) einen der oben aufgelisteten Operanden bzw. eines der oben aufgelisteten Elemente enthält
Beispiele
„*
“ wählt alle Spalten der in der FROM-Klausel angegebenen Tabellen aus. Die Reihenfolge der Spalten in der Ergebnistabelle wird durch die Reihenfolge der Tabellen in der FROM-Klausel und innerhalb einer Tabelle durch die definierte Reihenfolge bestimmt.
SELECT * FROM auftrag, kunde
KUNDE.*
wählt alle Spalten der Tabelle KUNDE aus. Durch DISTINCT werden doppelte Sätze nicht in die Ergebnistabelle übernommen.
SELECT DISTINCT auftrag.anr, kunde.* FROM auftrag, kunde
Folgender SELECT-Ausdruck wählt die Auftragsnummern aus den Tabellen LEISTUNG und AUFTRAG aus. Die Spaltennamen müssen eindeutig sein. Werden Tabellen mit identischen Spaltennamen verbunden, dann müssen die Spaltennamen mit den Tabellen- bzw. Korrelationsnamen qualifiziert werden. Durch ALL (Voreinstellung) werden doppelte Sätze in die Ergebnistabelle übernommen.
SELECT ALL L.anr, A.anr FROM leistung L, auftrag A
Folgender SELECT-Ausdruck wählt die Bezeichnung der Leistung und den Preis pro Leistungseinheit einschließlich Mehrwertsteuer aus. Ist ausdruck ohne die Angabe [AS] spalte ein Spaltenname, dann erhält die Spalte der Ergebnistabelle diesen Spaltennamen (im Beispiel LTEXT).
Mit [AS] spalte kann ein Name für die Ergebnisspalte vergeben werden, auf die sich ausdruck bezieht (im Beispiel BRUTTOPREIS). Die Eigenschaften einer Spalte der Ergebnistabelle (Datentyp, Länge, Stellen, Nachkommastellen) werden entweder von der zu Grunde liegenden Spalte übernommen (LTEXT) oder ergeben sich aus dem angegebenen ausdruck (lsatz*(1.0+mwsatz)).
SELECT ltext, lsatz*(1.0+mwsatz) AS bruttopreis
Die Ergebnistabelle enthält einen einzigen Satz. Dessen einzige Spalte die Summe der Werte ungleich NULL von LEISTUNG.LSATZ ist, bzw. NULL, wenn es keinen solchen Satz gibt. Kommt in der SELECT-Liste eine Mengenfunktion vor, dann dürfen in der SELECT-Liste nur Spaltennamen vorkommen, die innerhalb des Arguments einer Mengenfunktion aufgeführt sind.
SELECT SUM(lsatz) FROM leistung
Die Ergebnistabelle enthält einen Satz, dessen einzige Spalte die Anzahl der Sätze von KONTAKT ist. Bezeichnet ausdruck ohne AS-Klausel keine Spalte, dann ist der Spaltenname nicht definiert.
SELECT COUNT(*) FROM kontakt