SELECT
selection
table-expression
|
Ein select-expression
gibt
eine Ergebnistabelle an. Sie 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
|
* |
Stern-Notation (*) :
Alle Spalten aller in der Beispiel: SELECT * FROM SQL-PERSONNEL, SQL-AUTOMOBILES ... |
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
Zwischenergebnistabelle erzeugen, die das Ergebnis einer
subquery
oder einer Join-Operation 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.
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 Zwischenergebnistabelle an, die das Ergebnis einer
Zusammenfügungsoperation (Join) ist.
Bei der Zusammenfügung 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 Zwischenergebnistabelle bilden, können ihrerseits
Zwischenergebnistabellen einer Zusammenfügungsoperation 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
-Zusammenfügungen:
search-condition |
Bei FULL OUTER
-Zusammenfügungen:
full-join-expression =
full-join-expression [AND
]
|
column-name | |||||
|
(column-name
,
)
|
Innerhalb einer
join-expression
sind nur
column-names
und die
scalar-function
VALUE
(oder ihr Synonym
COALESCE
)
erlaubt.
Siehe Informationen zu
column-name
.
FINAL TABLE (INSERT-statement)
|
|||||
TABLE
(searched-UPDATE-statement)
|
|||||
OLD TABLE (searched-DELETE-statement)
|
|||||
FINAL TABLE (MERGE-statement)
|
Eine
data-change-table-reference
gibt eine
Zwischenergebnistabelle 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:
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 |
column-name | ||
integer | ||
sort-key-expression |
FETCH FIRST
|
1 integer |
ROWS ROW |
ONLY
|
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 ...