SELECT
selection
table-expression
|
Ein select-expression
gibt
eine Ergebnistabelle an. Es wird bei den folgenden Statements benutzt:
INSERT
|
SELECT
|
UPDATE
Dieses Dokument behandelt folgende Themen:
, | ||||||||
* |
Mit selection
geben Sie die
Spalten der auszuwählenden Ergebnissatztabellen an.
Syntax-Element-Beschreibung:
Syntax-Element | Beschreibung |
---|---|
ALL |
DISTINCT |
Eliminierung doppelt vorkommender
Zeilen:
Doppelt vorkommende Zeilen werden nicht automatisch aus
dem Ergebnis eines Die Alternative zu |
scalar-expression |
Skalar-Ausdruck:
Anstelle eines einfachen Spaltennamen können Sie auch
allgemeine Beispiel: SELECT NAME, 65 - AGE FROM SQL-PERSONNEL ... |
AS |
Das optionale Schlüsselwort
AS steht zu Beginn eines
correlation-name
für eine Spalte.
|
correlation-name |
Korrelationsname:
Es besteht die Möglichkeit, einem
Der
|
unpack-row |
Siehe unpack-row weiter unten. |
* |
Stern-Notation (*) :
Alle Spalten aller in der Beispiel: SELECT * FROM SQL-PERSONNEL, SQL-AUTOMOBILES ... |
UNPACK
(scalar-expression)
.* AS ({field-name
data-type} ,
)
|
Mit unpack-row
geben Sie
eine Spalte nicht entpackter Binärwerte an, die zurückgegeben werden, wenn die
SQL UNPACK
-Funktion aufgerufen wird. Die Anzahl der Feldnamen
(field-names) und Datentypen
(data-types) muss mit der Anzahl der von der
SQL UNPACK
-Funktion zurückgegeben Felder übereinstimmen.
from-clause [where-clause] |
[group-by-clause] [having-clause] |
[order-by-clause] [fetch-first-clause] |
Ein table-expression
gibt
an, von wo und nach welchen Kriterien Zeilen ausgewählt werden sollen.
Folgende Themen werden behandelt:
FROM
table-reference,…
|
Diese Klausel gibt an, von welchen Tabellen die Ergebnismenge erstellt werden soll.
Die in der FROM
-Klausel angegebenen Tabellen müssen
die in der Auswahlliste verwendeten Spaltenfelder enthalten.
Sie können entweder eine einzelne Tabelle angeben oder eine
Zwischentabelle erzeugen, die das Ergebnis einer
subquery
oder eines Join
(Verbundoperation) ist, siehe unten).
Da in einer FROM
-Klausel mehrere Tabellen (d.h. DDMs)
angesprochen werden können und eine
table-expression
mehrere
FROM
-Klauseln enthalten kann, wenn
subqueries
angegeben sind, bestimmt die
Datenbanknummer (DBID) des ersten DDMs in der ersten FROM-Klausel die zugrunde
liegende Datenbank.
Die TABLE
function-name
-Klausel gehört zum
SQL Extended Set und
erfordert eine
correlation-clause
mit einer column-name
-Liste.
Die period-specification-Klausel gehört zum SQL Extended Set.
FOR
|
Mit der optionalen Angabe einer
period-specification
geben Sie an, dass
für die Zeittabelle (table-name
) eine
Zeitraumangabe gilt. Derselbe Zeitraumname (SYSTEM_TIME
oder
BUSINESS_TIME
) darf nicht mehr als einmal für dieselbe Tabelle
angegeben werden.
Syntax-Element-Beschreibung:
Optional kann eine
correlation-clause
zu einem
table-name
zugeordnet werden. Bei einer
subquery
muss eine
correlation-clause
zugeordnet
werden.
[AS ]
correlation-name
[(column-name,...)]
|
Eine correlation-clause
besteht aus dem optionalen Schlüsselwort AS
und einem
correlation-name
.
Optional kann danach noch eine einfache Liste mit Spaltennamen angegeben
werden. column-name
gehört zum
SQL Extended Set.
table-reference |
|
JOIN
table-reference
ON
join-condition |
||||||
(joined-table) |
Eine joined-table
gibt
eine Zwischentabelle an, die das Ergebnis einer Verbundoperation (Join)
ist.
Bei der Verbundoperation kann es sich um einen
INNER
, LEFT OUTER
, RIGHT OUTER
oder
FULL OUTER
JOIN
handeln. Falls Sie nichts angeben,
gilt INNER
.
Es ist möglich, mehrere Joins zu schachteln, d.h. die Tabellen,
die die Zwischentabelle bilden, können ihrerseits Zwischentabellen einer
Verbundoperation oder einer subquery
sein, wobei letztere wiederum ebenfalls eine
joined-table
oder eine weitere
subquery
in der
FROM
-Klausel haben kann.
Bei INNER
-, LEFT OUTER
- und
RIGHT OUTER
-Verbundoperationen:
search-condition |
Bei FULL OUTER
-Verbundoperationen:
full-join-expression =
full-join-expression [AND
]
|
column-name | |||||
|
(column-name
,
)
|
Innerhalb eines
join-expression
sind nur
column-names
und die
scalar-function
VALUE
(oder ihr Synonym
COALESCE
)
erlaubt.
Weitere Informationen siehe
column-name
.
Die
data-change-table-reference
-Klausel
gehört zum SQL Extended
Set
FINAL TABLE (INSERT-statement)
|
|||||
TABLE
(searched-UPDATE-statement)
|
|||||
OLD TABLE (searched-DELETE-statement)
|
|||||
FINAL TABLE (MERGE-statement)
|
Eine
data-change-table-reference
gibt eine
Zwischentabelle an, die auf den Zeilen basiert, die durch das in der
FROM
-Klausel angegebene SQL-Datenänderungs-Statement verändert
werden. Eine
data-change-table-reference
kann nur
als die einzige Tabellenreferenz in der FROM
-Klausel angegeben
werden.
Syntax-Element-Beschreibung:
Die
xmltable-function
-Klausel gehört zum
SQL Extended Set
Eine xmltable-function
gibt den Aufruf der eingebauten XMLTABLE
-Funktion an.
[WHERE
search-condition]
|
In der WHERE
-Klausel geben Sie ein Auswahlkriterium
(search-condition
) an, nach dem die
Zeilen ausgewählt werden sollen.
Beispiel:
DEFINE DATA LOCAL 01 NAME (A20) 01 AGE (I2) END-DEFINE ... SELECT * INTO NAME, AGE FROM SQL-PERSONNEL WHERE AGE = 32 END-SELECT ...
Weitere Informationen siehe Suchbedingungen.
[GROUP BY
column-reference, ... ]
|
Die GROUP BY
-Klausel sortiert die durch der
FROM
-Klausel angegebene Tabelle nach Gruppen, und zwar so, dass
alle Zeilen einer Gruppe in der GROUP BY
-Spalte den gleichen Wert
haben.
Jede column-reference
in
der Selektionsliste muss entweder eine GROUP BY
-Spalte sein oder
mit einer aggregate-function
angegeben werden. aggregate-functions
werden auf einzelne Gruppen (nicht auf die ganze Tabelle) angewandt. Die
Ergebnistabelle enthält soviele Zeilen wie Gruppen.
Weitere Informationen siehe Column Reference und Aggregate Function.
Beispiel:
DEFINE DATA LOCAL 1 #AGE (I2) 1 #NUMBER (I2) END-DEFINE ... SELECT AGE , COUNT(*) INTO #AGE, #NUMBER FROM SQL-PERSONNEL GROUP BY AGE ...
Falls der GROUP BY
-Klausel eine
WHERE
-Klausel vorangeht, werden alle Zeilen, die nicht die
WHERE
-Klausel erfüllen, ausgeschlossen, bevor die Sortierung
erfolgt.
[HAVING
search-condition]
|
Wenn Sie eine HAVING
-Klausel verwenden, sollten Sie
auch eine GROUP BY
-Klausel verwenden.
So wie die WHERE
-Klausel Zeilen aus einer
Ergebnistabelle aussortiert, sortiert die HAVING
-Klausel Gruppen
aus, und zwar auf Grundlage einer Suchbedingung
(search-condition
). Skalar-Ausdrücke in
einer HAVING
-Klausel dürfen pro Gruppe nur einen Wert enthalten.
Weitere Informationen siehe Scalar Expressions and Search Conditions.
Beispiel:
DEFINE DATA LOCAL 1 #NAME (A20) 1 #AVGAGE (I2) 1 #NUMBER (I2) END-DEFINE ... SELECT NAME, AVG(AGE), COUNT(*) INTO #NAME, #AVGAGE, #NUMBER FROM SQL-PERSONNEL GROUP BY NAME HAVING COUNT(*) > 1 ...
ORDER BY
|
sort-key |
|
, | ||||
INPUT SEQUENCE |
|||||||
ORDER OF
table-designator |
Die order-by
-Klausel gibt
die Reihenfolge für die Ergebnistabellenzeilen an.
column-name | ||
integer | ||
sort-key-expression |
Ein sort-key-expression
ist ein expression
, der nicht einfach
ein column-name
oder eine
vorzeichenlose ganzzahlige constant
ist.
INPUT SEQUENCE
gehört zum
SQL Extended Set.
INPUT SEQUENCE
gibt an, dass die Ergebnistabelle die
Eingabereihenfolge der Zeilen widerspiegelt, die in der
VALUE
-Klausel eines INSERT
-Statements angegeben sind.
INPUT SEQUENCE
kann nur angegeben werden, wenn in der
from-clause
ein
INSERT
-Statement angegeben ist.
ORDER OF
table-designator
gehört zum
SQL Extended Set.
ORDER OF
table-designator
gibt an, dass die
Sortierfolge der bezeichneten Tabelle nach der Tabellenkennung
(table-designator
) auf die
Ergebnistabelle der Abfrage angewendet werden soll. Der
table-designator
identifiziert eine
Basistabelle, eine Datensicht (view) oder einen geschachtelten Tabellenausdruck
(table-expression
) einer
Untervorauswahl (subselect
)
eindeutig.
Die fetch-first
-Klausel
gehört zum SQL Extended
Set.
FETCH FIRST
|
1 integer |
ROWS ROW |
ONLY
|
Die fetch-first
-Klausel
begrenzt die Anzahl der Zeilen, die abgerufen werden können. Sie verbessert die
Performance von Abfragen, wenn nur eine begrenzte Anzahl an Zeilen benöigt
wird.
Beispiel 1:
DEFINE DATA LOCAL 01 #NAME (A20) 01 #FIRSTNAME (A15) 01 #AGE (I2) ... END-DEFINE ... SELECT NAME, FIRSTNAME, AGE INTO #NAME, #FIRSTNAME, #AGE FROM SQL-PERSONNEL WHERE NAME IS NOT NULL AND AGE > 20 ... DISPLAY #NAME #FIRSTNAME #AGE END-SELECT ... END
Beispiel 2:
DEFINE DATA LOCAL 01 #COUNT (I4) ... END-DEFINE ... SELECT SINGLE COUNT(*) INTO #COUNT FROM SQL-PERSONNEL ...