Skalar-Ausdrücke

+
-

factor
(scalar-expression)

                             

scalar-expression scalar-operator scalar-expression

This Dokument behandelt folgende Themen:


scalar-expression

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).

scalar-operator

+

-
*
/
| |
CONCAT

A scalar-operator can be any of the operators listed above. The minus (-) and slash (/) operators must be separated by at least one blank from preceding operators.

factor

Common Set-Syntax:

atom
column-reference
aggregate-function
special-register

Extended Set-Syntax:

atom
column-reference
aggregate-function
olap-specification
row-change-expression
special-register
scalar-function
(scalar-expression,)
labeled-duration
case-expression
cast-expression
user-defined-function-reference
sequence-reference
time-zone-specific-expression

Ein factor kann eines der obigen Elemente sein, die im Folgenden beschrieben sind.

atom

parameter
constant

Ein atom kann entweder ein parameter oder eine Konstante (constant) sein.

column-reference

table-name.
correlation-name.

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).

aggregate-function

Common Set-Syntax:

COUNT

(*)
(DISTINCT column-reference)

 

AVG
MAX
MIN
SUM

(DISTINCT column-reference)
([ALL] scalar-expression)

 

Extended Set-Syntax:

COUNT
COUNT-BIG

(

ALL
DISTINCT

scalar-expression

)

*

AVG
MAX
MIN
SUM
STDDEV
STDDEV_SAMP
VARIANCE
VARIANCE_SAMP

(

ALL
DISTINCT

scalar-expression )

CORRELATION
COVARIANCE
COVARIANCE_SAMP

(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:

AVG gibt den Durchschnitt der Werte einer Spalte zurück.
COUNT gibt die Anzahl der Werte einer Spalte zurück.
MAX gibt den größten Wert einer Spalte zurück.
MIN gibt den kleinsten Wert einer Spalte zurück.
SUM gibt die Summe der Werte einer Spalte zurück.

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 
  ...

DISTINCT

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-expression

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.

TIMESTAMP Gibt an, dass ein Zeitstempel zurückgegeben wird, der für die letztmalige Änderung an einer Zeile steht.
TOKEN Gibt an, dass einen Zeichenfolge (Token) des Typs BIGINT zurückgegeben wird, das für einen relativen Punkt in der Änderungsabfolge einer Zeile steht.
FOR table-designator Bezeichnet die Tabelle, in welcher der Ausdruck referenziert wird. table-designator muss ein gültiges Natural SQL DDM sein.

OLAP-expression

ordered-OLAP-specification
numbering-specification
aggregation-specification

ordered-OLAP-specification

RANK

( ) OVER ([window-partition-clause] window-order-clause)
DENSE_RANK

numbering-specification

ROW_NUMBER ( ) OVER ([window-partition-clause] [window-order-clause])

aggregation-specification

aggregate-function OVER ( [window-partition-clause])

RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

window-order-clause

RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
window-aggregation-group-clause

aggregate-function

AVG function

CORRELATION function
COUNT function
COUNT_BIG function
COVARIANCE function
MAX function
MIN function
STDDEV function
SUM function
VARIANCE function

window-aggregation-group-clause

ROWS
RANGE

group-start
group-between
group-end

group-start

UNBOUNDED PRECEDING
unsigned-constant PRECEDING
CURRENT ROW

group-between

BETWEEN group-bound-1 AND group-bound-2

group-bound-1

UNBOUNDED PRECEDING
unsigned-constant PRECEDING
unsigned-constant FOLLOWING
CURRENT ROW

group-bound-2

UNBOUNDED FOLLOWING
unsigned-constant PRECEDING
unsigned-constant FOLLOWING
CURRENT ROW

group-end

UNBOUNDED FOLLOWING
unsigned-constant FOLLOWING

window-partition-clause

PARTITION BY partitioning-expression,...

window-order-clause

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.

RANK Gibt an, dass der Rang einer Zeile definiert ist als 1 plus Anzahl der Zeilen, die der Zeile unmittelbar vorangehen.
DENSE_RANK Gibt an, dass der Rang einer Zeile definiert ist als 1 plus Anzahl der vorangehenden Zeilen, die sich hinsichtlich der Reihenfolge unterscheiden.
ROW_NUMBER Gibt an, dass Zeilenfolgenummer für die Zeile berechnet wird, die durch die Reihenfolge definiert ist, wobei mit der 1 für die erste Zeile begonnen wird.
PARTITION BY Definiert die Partition, in der die OAP-Operation angewendet wird.
ORDER BY Definiert die Reihenfolge von Zeilen innerhalb einer Partition, die zur Bestimmung des Werts der OLAP-Angabe verwendet wird.
ASC Gibt an, dass die sort-key-expression-Werte in aufsteigender Reihenfolge verwendet werden.
DESC Gibt an, dass die sort-key-expression-Werte in absteigender Reihenfolge verwendet werden.
NULLS_FIRST Gibt an, dass hinsichtlich der Window-Reihenfolge Nullwerte vor allen Werten ungleich Null bei der der Sortierreihenfolge berücksichtigt werden.
NULLS LAST Gibt an, dass hinsichtlich der Window-Reihenfolge Nullwerte nach allen Werten ungleich Null bei der der Sortierreihenfolge berücksichtigt werden.

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

time-zone-specific-expression

Gibt einen Zeitstempel mit Zeitzonenwert an: AT LOCAL oder AT TIME ZONE

AT LOCAL

function-invocation
(expression)
constant
column-name
variable
special-register
scalar-fullselect
case-expression
cast-specification

{AT LOCAL}

AT TIME ZONE

function-invocation
(expression)
constant
column-name
variable
special-register
scalar-fullselect
case-expression
cast-specification

{AT TIME ZONE}

function-invocation
(expression)
constant
column-name
variable
special-register
scalar-fullselect
case-expression
cast-specification

special-register

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 Syntactical Items Common to Natural SQL Statements in der Database Management System Interfaces-Dokumentation.

scalar-function

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 Syntactical Items Common to Natural SQL Statements, scalar-function in der Natural for DB2-Dokumentation.

labeled-duration

scalar-expression

YEAR
YEARS
MONTH
MONTHS
DAY
DAYS
HOUR
HOURS
MINUTE
MINUTES
SECOND
SECONDS
MICROSECOND
MICROSECONDS

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-expression

CASE

searched-when-clause
simple-when-clause

ELSE

NULL
scalar-expression

END

case-expression entspricht nicht dem Standard SQL und wird daher nur vom Natural SQL Extended Set unterstützt.

WHEN-Klausel mit Suchbedingung

WHEN search-condition THEN

NULL
scalar-expression

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.

Einfache WHEN-Klausel

scalar-expression

WHEN scalar-expression THEN

NULL
scalar-expression

Eine einfache WHEN-Klausel entspricht nicht dem Standard SQL und wird daher nur vom Natural SQL Extended Set unterstützt.

cast-expression

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.

user-defined-function-reference

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.

sequence-reference

Die Option sequence-reference gehört zum Natural SQL Extended Set.

NEXT VALUE FOR sequence-name
PREVIOUS VALUE FOR sequence-name

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.

scalar-fullselect

(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 für einen scalar-fullselect mehr als eine Zeile zurückgegeben werden soll, tritt ein Fehler auf.

row-value-expression

(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).