+
|
factor | ||||||||
-
|
(scalar-expression) | ||||||||
scalar-expression | scalar-operator | scalar-expression |
Dieses Dokument behandelt folgende Themen:
Eine scalar-expression besteht aus einem factor und anderen scalar-expressions einschließlich scalar-operators.
In punkto 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 einer der oben aufgeführten Operatoren sein, wobei vor und nach den Operatoren − und / jeweils mindestens ein Leerzeichen stehen muss.
Common Set-Syntax:
atom | ||
column-reference | ||
aggregate-function | ||
special-register |
Extended Set-Syntax:
Ein factor kann eines der obigen Elemente sein, die im Folgenden beschrieben sind.
parameter | ||
constant |
Ein atom kann entweder ein parameter oder eine Konstante (constant) sein; vgl. Abschnitt Grundlegende Syntaxbestandteile.
table-name . | column-name | ||
correlation-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
|
(*) | ||||||
(DISTINCT
column-reference)
|
|||||||
AVG
|
|||||||
MAX
|
(DISTINCT
column-reference)
|
||||||
MIN
|
([ALL ]
scalar-expression)
|
||||||
SUM
|
Extended Set-Syntax:
COUNT
|
(*) | ||||||
(DISTINCT
column-reference)
|
|||||||
AVG
|
|||||||
MAX
|
|||||||
MIN
|
|||||||
SUM
|
|||||||
COUNT_BIG
|
|||||||
STDDEV |
|||||||
STDDEV_POP
|
(DISTINCT
column-reference)
|
||||||
STDDEV_SAMP
|
([ALL ]
scalar-expression)
|
||||||
VAR
|
|||||||
VAR_POP
|
|||||||
VAR_SAMP
|
|||||||
VARIANCE
|
|||||||
VARIANCE_SAMP
|
SQL bietet eine Reihe 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 eine allgemeine scalar-expression sein.
DISTINCT
ist nicht erlaubt mit der
Funktion COUNT(*)
, mit der alle Reihen in einer Tabelle — ohne
Eliminierung doppelt vorkommender Reihen — gezählt werden.
ROW CHANGE
|
TIMESTAMP |
FOR
table-designator |
||
TOKEN |
A ROW CHANGE
expression retuns a token or a timestamp that
represents the last change to a row.
TIMESTAMP |
Specifies a timestamp is returned that represents the last time when a row was changed. |
TOKEN |
Specifies a token of type BIGINT is
returned that represents a relative point in the modification sequence of a
row.
|
FOR
table-designator |
Identifies the table in which the expression is
referenced. table-designator has to be
a valid Natural SQL DDM.
|
ordered-OLAP-specification | ||
numbering-specification |
RANK |
( ) OVER
([window-partition-clause]
window-order-clause)
|
|||
DENSE_RANK |
ROW_NUMBER ( ) OVER
([window-partition-clause]
[window-order-clause])
|
PARTITION BY
partitioning-expression,...
|
ORDER BY
{sort-key-expression |
ASC |
},... | ||||
NULLS
LAST |
||||||
ASC NULLS
FIRST |
||||||
DESC |
||||||
NULLS
FIRST |
||||||
DESC NULLS
LAST |
Online analytical processing (OLAP) specifications provide the ability
to return ranking and row numbering information as a scalar value in the result
of a query. An OLAP specification can be included in an expression, in a
select-list, or in the ORDER BY
clause of a SELECT
statement. The query result to which the OLAP specifications are applied is the
result table of the innermost subselect that includes the OLAP
specifications.
RANK |
Specifies that the rank of a row is defined as 1 plus the number of rows that strictly precede the row. |
DENSE_RANK |
Specifies that the rank of a row is defined as 1 plus the number of preceding rows that are distinct with respect to the ordering. |
ROW_NUMBER |
Specifies that a sequential row number is computed for the row that is defined by the ordering, starting with 1 for the first row. |
PARTITION BY |
Defines the partition within which the OLAP operation is applied. |
ORDER BY |
Defines the ordering of rows within a partition that is used to determine the value of the OLAP specification. |
ASC |
Specifies that the values of
sort-key-expression are used in
ascending order.
|
DESC |
Specifies that the values of
sort-key-expression are used in
descending order.
|
NULLS_FIRST |
Specifies that the window ordering considers null values before all non-null values in the sort order. |
NULLS LAST |
Specifies that the window ordering considers null values after all non-null values in the sort order. |
Example:
Display the ranking of employees that have a total salary of more than $30,000, in order by last name.
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;
Common Set-Syntax:
USER
|
Extended Set-Syntax:
USER
|
||
CURRENT TIMEZONE
|
||
CURRENT DATE
|
||
CURRENT TIME
|
||
CURRENT TIMESTAMP
|
||
CURRENT SQLID
|
||
CURRENT PACKAGESET
|
||
CURRENT SERVER
|
Bei der Referenzierung eines special-registers erhält man einen Skalarwert.
special-register sind —
mit Ausnahme von USER
— nicht Teil der Standard-SQL und werden
daher nur als Teil des Natural SQL Extended Set unterstützt.
scalar-functions sind eingebaute, bei der Konstruktion von Skalar-Berechnungen verwendbare Funktionen.
Informationen zu scalar-functions, die vom Natural SQL Extended Set unterstützt werden, finden Sie im Abschnitt Natural SQL Statements − Syntactical Items, scalar-function in der Natural for DB2-Dokumentation.
YEAR
|
||
YEARS
|
||
MONTH
|
||
MONTHS
|
||
DAY
|
||
DAYS
|
||
HOUR
|
||
HOURS
|
||
MINUTE
|
||
MINUTES
|
||
SECOND
|
||
SECONDS
|
||
MICROSECOND
|
||
MICROSECONDS
|
Units sind nicht Teil der Standard-SQL und werden daher nur als Teil des Natural SQL Extended Set unterstützt.
CASE
|
searched-when-clause | ELSE
|
NULL
|
END
|
||||||
simple-when-clause | scalar-expression |
Case-expressions sind nicht Teil der Standard-SQL und werden daher nur als Teil des Natural SQL Extended Set unterstützt.
WHEN
search-condition THEN
|
NULL
|
||
scalar-expression |
Eine searched-when-clause ist nicht Teil der Standard-SQL und wird daher nur als Teil des Natural SQL Extended Set unterstützt.
Näheres zu search-condition siehe search-condition.
scalar-expression | WHEN
scalar-expression
THEN
|
NULL
|
|||
scalar-expression |
Eine simple-when-clause ist nicht Teil der Standard-SQL und wird daher nur als Teil des Natural SQL Extended Set unterstützt.
CAST
(scalar-expression
AS data-type)
|
Cast-expressions sind nicht Teil der Standard-SQL und werden daher nur als Teil des Natural SQL Extended Set unterstützt.
Die Option user-defined-function-reference gehört zum Natural SQL Extended Set.
Diese Option ermöglicht Ihnen den Aufruf einer beliebigen benutzerdefinierten Funktion. Argumente müssen in Klammern gesetzt werden und durch Kommas voneinander getrennt werden. Die benutzerdefinierte Funktion muss in der Ziel-RDBMS deklariert werden.
NEXT VALUE FOR sequence-name |
PREVIOUS VALUE FOR sequence-name |
Die Option sequence-reference gehört zum Natural SQL Extended Set.
Diese Option ermöglicht es Ihnen, den nächsten Wert oder den vorherigen Wert eines Sequence Object zu referenzieren. Das Sequence Object muss im Ziel-RDBMS generiert werden, bevor es zur Laufzeit referenziert werden kann.
(fullselect) |
Die Option user-defined-function-reference gehört zum Natural SQL Extended Set.
Ein in einem Ausdruck unterstütztes scalar-fullselect ist ein in Klammern stehendes fullselect, das eine einzelne Reihe zurückgibt, die aus einem einzelnen Spaltenwert besteht. Wenn das fullselect keine Reihe zurückgibt, ist das Ergebnis des Ausdrucks der Nullwert. Wenn mehr als eine Reihe für ein scalar-fullselect zurückgegeben werden soll, tritt ein Fehler auf.