|
|
|
|
|
|
|
|
||||||||||||||||
| scalar-expression scalar-operator scalar-expression | ||||||||||||||||||||||
Dieser Abschnitt behandelt folgende Themen:
Ein scalar-expression besteht aus einem
factor und anderen
scalar-expressions einschließlich
scalar-operators.
Hinsichtlich der Referenzierungspriorität gilt Folgendes:
Wenn in einer scalar-expression ein
unqualifizierter Variablenname angegeben wird, wird zunächst angenommen, dass es sich
um den Namen einer Spalte der referenzierten Tabelle handelt.
Falls in der Tabelle eine Spalte dieses Namens nicht vorkommt, behandelt Natural die
Variable als Benutzervariable (host-variable).
|
|
+
|
|
-
|
||
*
|
||
/
|
||
| |
|
||
CONCAT
|
Ein scalar-operator kann jeder der oben
aufgeführten Operatoren sein. Die Operatoren Minus (-) und Schrägstrich (/) müssen durch
mindestens ein Leerzeichen von den vorangehenden Operatoren getrennt sein.
Common Set-Syntax:
|
|
|
Extended Set-Syntax:
Ein factor kann eines der obigen Elemente sein,
die im Folgenden beschrieben sind.
|
|
parameter
|
|
Ein atom kann entweder ein
parameter oder eine Konstante
(constant) sein.
|
|
|
column-name |
Eine column-reference ist ein Spaltenname
(column-name), optional qualifiziert durch
einen Tabellennamen (table-name) oder einen
correlation-name (vgl. Abschnitt Grundlegende Syntaxbestandteile).
Qualifizierte Namen sind oft klarer als unqualifizierte und manchmal erforderlich.
Anmerkung
Ein table-name darf hier nicht explizit mit
einem authorization-identifier qualifiziert
werden. Falls Sie einen qualifizierten
table-name benötigen, verwenden Sie
stattdessen einen correlation-name.
Wird eine Spalte mit einem table-name oder
correlation-name referenziert, muss sie in
der betreffenden Tabelle enthalten sein. Wird weder
table-name noch
correlation-name angegeben, muss die
betreffende Spalte in einer der in der FROM-Klausel angegebenen Tabellen enthalten sein (siehe
table-expression).
Common Set-Syntax:
|
|
COUNT
|
|
|
||||
|
|
|
|
( |
|
|||
Extended Set-Syntax:
|
|
|
|
|
( |
|
|
|
|
scalar-expression |
|
) |
|
* |
||||||||||||
|
|
|
( |
|
|
|
scalar-expression ) | ||||||
|
|
|
|
(scalar-expression-1,scalar-expression-2) | |||||||||
SQL bietet eine Anzahl spezieller Funktionen zur Erweiterung der grundlegenden
Such-Möglichkeiten. Folgende sogenannte SQL
aggregate-functions sind verfügbar und
werden von Natural unterstützt:
Bis auf COUNT(*) sammelt jede dieser Funktionen die Skalarwerte in einem
Argument, d.h. einer einzelnen Spalte oder einer scalar-expression, und gibt
als Ergebnis einen Skalarwert zurück.
Beispiel:
DEFINE DATA LOCAL 1 AVGAGE (I2) END-DEFINE ... SELECT AVG (AGE) INTO AVGAGE FROM SQL-PERSONNEL ...
Im allgemeinen kann dem Argument optional das Schlüsselwort DISTINCT
vorangestellt werden, um doppelte Werte zu eliminieren, bevor die Funktion ausgeführt
wird.
Wenn Sie DISTINCT angeben, muss das Argument der Name einer einzelnen
Spalte sein; wenn Sie DISTINCT nicht angeben, kann das Argument ein
allgemeiner scalar-expression sein.
DISTINCT ist nicht erlaubt bei der Funktion
COUNT(*), mit der alle Zeilen in einer Tabelle ohne Eliminierung doppelt
vorkommender Zeilen gezählt werden.
ROW CHANGE
|
|
TIMESTAMP |
|
FOR
table-designator |
TOKEN |
Ein ROW CHANGE-Ausdruck liefert eine Zeichenfolge (Token) oder einen
Zeitstempel, das bzw. der für die letzte Änderung an einer Zeile steht.
Für die folgenden Klauseln des OLAP-expression
ist der IBM Db2 Analytics Accelerator for z/OS erforderlich:
CUME_DIST
PERCENT_RANK
NTILE
LAG
LEAD
FIRST_VALUE
LAST_VALUE
NTH_VALUE
RATIO_TO_REPORT
|
|
ordered-OLAP-specification |
|
|
|
CUME_DIST ( )
|
|
OVER ([window-partition-clause] window-order-clause)
|
|
PERCENT_RANK ( )
|
||||
RANK ( ) |
||||
DENSE_RANK ( ) |
||||
NTILE
(num-tile)
|
||||
| lag-function | ||||
| lead-function | ||||
LAG (
expression [ , offset [
, default [ ,
|
|
'RESPECT
NULLS' |
|
] ] ] ) |
'IGNORE NULLS' |
LEAD (
expression [ , offset [
, default [ ,
|
|
'RESPECT
NULLS' |
|
] ] ] ) |
'IGNORE NULLS' |
ROW_NUMBER
( ) OVER ([window-partition-clause] [window-order-clause])
|
|
|
aggregate-function |
|
OVER ( [window-partition-clause])
|
||
| OLAP-column-function | |||||
|
|
RANGE BETWEEN
UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING |
|
|||
| window-order-clause |
|
|
|
||
|
|
AVG function |
|
| CORRELATION function | ||
| COUNT function | ||
| COUNT_BIG function | ||
| COVARIANCE function | ||
| MAX function | ||
| MIN function | ||
| STDDEV function | ||
| SUM function | ||
| VARIANCE function |
|
|
first-value-function |
|
| last-value-function | ||
| nth-value-function | ||
| ratio-to-report-function |
FIRST_VALUE ( expression [
, |
|
'RESPECT
NULLS' |
|
] ) |
'IGNORE NULLS' |
LAST_VALUE ( expression [
, |
|
'RESPECT
NULLS' |
|
] ) |
'IGNORE NULLS' |
NTH_VALUE (
expression
|
, nth-row ) |
|
RATIO_TO_REPORT (
expression )
|
|
|
|
|
|
|
|
|
|
|
BETWEEN
group-bound-1
AND
group-bound-2 |
|
|
|
|
|
|
|
|
|
|
|
|
PARTITION BY
partitioning-expression,...
|
ORDER BY
{sort-key-expression |
|
|
ASC |
|
|
},... |
NULLS
LAST |
||||||
ASC
NULLS FIRST |
||||||
DESC |
||||||
DESC
NULLS FIRST |
||||||
DESC
NULLS LAST |
OLAP-Angaben (Online Analytical Processing) bieten die Möglichkeit, im Ergebnis einer
Abfrage Informationen zur Rangfolge, Zeilennummerierung und Aggregation als Skalarwert
zurückzugeben. Eine OLAP-Angabe kann enthalten sein in einem Ausdruck, in einer
select-list oder in der ORDER
BY-Klausel eines SELECT-Statements. Das Abfrageergebnis, auf das
die OLAP-Angaben angewendet werden, ist die Ergebnistabelle der innersten Unterauswahl
(subselect), in der die OLAP-Angaben
enthalten sind.
Beispiel:
Das folgende Beispiel zeigt die Rangordnung der Mitarbeiter, sortiert nach Nachnamen, die ein Gesamtgehalt von mehr als $30,000 haben.
SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK() OVER(ORDER BY SALARY+BONUS DESC) AS RANK_SALARY FROM DSN8910-EMP WHERE SALARY+BONUS > 30000 ORDER BY LASTNAME;
time-zone-specific-expression
Gibt einen Zeitstempel mit Zeitzonenwert an: AT
LOCAL oder AT TIME
ZONE
AT
LOCAL|
|
function-invocation |
|
{AT
LOCAL}
|
|||||
AT TIME
ZONE|
|
function-invocation |
|
{AT TIME
ZONE}
|
|
function-invocation |
|
||
Eine Referenz auf ein special-register gibt
einen Skalarwert zurück.
Weitere Informationen zu den von Natural unterstützten speziellen Registern siehe special-register im Abschnitt Gemeinsame syntaktische Elemente für Natural SQL-Statements in der Datenbankmanagementsystem-Schnittstellen-Dokumentation.
Eine scalar-function ist eine eingebaute
Funktion, die zur Erstellung skalarer Berechnungsausdrücke benutzt werden kann.
Informationen zu den Skalarfunktionen, die vom Natural SQL Extended Set unterstützt werden,
siehe Gemeinsame syntaktische Elemente für Natural SQL-Statements,
scalar-function in der
Natural for Db2-Dokumentation.
| scalar-expression |
|
|
|
Eine labeled-duration zeigt eine spezifische
Zeiteinheit an, die durch eine Zahl ausgedrückt wird, welche ein Ausdruck sein kann, auf
den eines der Schlüsselwörter für die Dauer folgt.
labeled-duration entspricht nicht dem Standard
SQL und wird daher nur vom Natural SQL
Extended Set unterstützt.
CASE
|
|
|
|
ELSE
|
|
|
|
END
|
case-expression entspricht nicht dem Standard
SQL und wird daher nur vom Natural SQL
Extended Set unterstützt.
WHEN
search-condition
THEN
|
|
|
Eine WHEN-Klausel mit Suchbedingung entspricht nicht dem Standard SQL
und wird daher nur vom Natural SQL
Extended Set unterstützt.
Weitere Informationen siehe search-condition.
| scalar-expression |
|
WHEN
scalar-expression
THEN
|
|
|
Eine einfache WHEN-Klausel entspricht nicht dem Standard SQL und wird
daher nur vom Natural SQL Extended
Set unterstützt.
CAST (scalar-expression
AS
data-type)
|
Ein cast-expression entspricht nicht dem Standard SQL und wird daher nur vom Natural SQL Extended Set unterstützt.
Die Option user-defined-function-reference
gehört zum Natural SQL Extended
Set. Mit dieser Option können Sie beliebige benutzerdefinierte Funktionen
aufrufen. Argumente müssen durch Kommas abgetrennt und in Klammern gesetzt werden. Die
benutzerdefinierte Funktion muss in der Ziel-RDBMS deklariert werden.
Die Option sequence-reference gehört zum
Natural SQL Extended Set.
|
|
|
Mit dieser Option können Sie den nachfolgenden oder den vorhergehenden Wert eines Abfolgeobjekts referenzieren. Das Abfolgeobjekt muss in der Ziel-RDBMS erstellt werden, ehe es zur Laufzeit referenziert wird.
| (fullselect) |
Die Option scalar-fullselect gehört zum Natural
SQL Extended Set.
Ein scalar-fullselect, der in einem Ausdruck
unterstützt wird, ist ein in Klammern stehendes
fullselect, das eine einzelne, aus einem
einzigen Spaltenwert bestehende Zeile zurückgibt. Wenn der
fullselect keine Zeile zurückgibt, ist das
Ergebnis des Ausdrucks der Nullwert. Wenn für einen
scalar-fullselect mehr als eine Zeile
zurückgegeben werden soll, tritt ein Fehler auf.
| (scalar-expression,...) |
Ein row-value-expression gibt eine einzelne Zeile
zurück, die aus einem oder mehreren Spaltenwerten besteht. Die Werte können in Form einer
Liste von Ausdrücken angegeben werden. Die Anzahl der vom
row-value-expression zurückgegebenen Spalten
ist gleich der Anzahl der Ausdrücke.
row-value-expression kann als Operand bei
mehreren predicates verwendet werden
(quantified, DISTINCT,
comparison und IN).