Um eine ungeordnete Ergebnistabelle in einer SELECT-Anweisung (named_select_statement) zu erzeugen, ist die Angabe eines QUERY-Ausdrucks (named_query_expression) erforderlich.
<named_query_expression> ::= <named_query_term> | <named_query_expression> UNION [ALL] <query_term> | <named_query_expression> EXCEPT [ALL] <query_term>
Besteht ein QUERY-Ausdruck aus mehr als einer QUERY-Spezifikation (query_spec) (Angabe erfolgt in named_query_term bzw. in query_term), so darf nur die erste QUERY-Spezifikation des QUERY-Ausdrucks eine QUERY-Spezifikation (named_query_spec) sein.
Besteht der QUERY-Ausdruck nur aus einer QUERY-Spezifikation (named_query_spec) (Angabe erfolgt in named_query_term), so ist das Ergebnis des QUERY-Ausdrucks das unveränderte Ergebnis der QUERY-Spezifikation.
Besteht der QUERY-Ausdruck aus mehr als einer QUERY-Spezifikation, muss die Anzahl der selektierten Spalten in allen QUERY-Spezifikationen des QUERY-Ausdrucks gleich sein. Die jeweils i-ten selektierten Spalten der QUERY-Spezfikationen müssen vergleichbar sein.
Spaltenart (select_column) |
|
Numerische Spalten |
Sind untereinander vergleichbar. Sind alle i-ten selektierten Spalten numerische Spalten, so ist die i-te Spalte der Ergebnistabelle eine numerische Spalte. |
Alphanumerische Spalten, Codeattribut BYTE |
Sind untereinander vergleichbar. |
Alphanumerische Spalten, Codeattribut ASCII, UNICODE |
Sind untereinander vergleichbar. Sind auch vergleichbar mit Datums-, Zeit- und Zeitstempelwerten. |
Alle i-ten Spalten sind Datumswerte |
i-te Spalte der Ergebnistabelle ist Datumswert |
Alle i-ten Spalten sind Zeitwerte |
i-te Spalte der Ergebnistabelle ist Zeitwert |
Alle i-ten Spalten sind Zeitstempelwerte |
i-te Spalte der Ergebnistabelle ist Zeitstempelwert |
Spalten vom Typ BOOLEAN |
Sind untereinander vergleichbar. |
Alle i-ten Spalten sind vom Typ BOOLEAN |
i-te Spalte der Ergebnistabelle ist vom Typ BOOLEAN |
Spalten von beliebigem anderen Datentyp (nicht weiter oben genannt) |
i-te Spalte der Ergebnistabelle ist eine alphanumerische Spalte. Vergleichbare Spalten mit unterschiedlichen Code-Attributen werden konvertiert. |
Sind Spalten vergleichbar, haben aber unterschiedliche Längen, so hat die korrespondierende Spalte der Ergebnistabelle die maximale Länge der zugrundeliegenden Spalten.
Die Namen der Spalten der Ergebnistabelle werden durch die Namen der selektierten Spalten der ersten QUERY-Spezifikation gebildet.
Sei T1 der linke Operand von UNION, EXCEPT oder INTERSECT (definiert in named_query_term). T2 sei der rechte Operand. R sei das Ergebnis der Operation T1 und T2.
· Eine Zeile ist ein Duplikat einer anderen Zeile, wenn beide in jeder Spalte identische Werte aufweisen. NULL-Werte gelten dabei als identisch. Spezial-NULL-Werte gelten als identisch.
· UNION: R enthält alle Zeilen aus T1 und T2.
· EXCEPT: R enthält alle Zeilen aus T1, die keine Duplikatzeile in T2 besitzen.
· INTERSECT: R enthält alle Zeilen aus T1, die eine Duplikatzeile in T2 besitzen. Eine Zeile aus T2 kann nur Duplikatzeile genau einer Zeile aus T1 sein. Mehrere Zeilen aus T1 können nicht dieselbe Duplikatzeile in T2 besitzen.
· Ist ALL nicht spezifiziert, so wird für die zu T1 und T2 gehörenden QUERY-Ausdrücke jeweils implizit DISTINCT angenommen. Aus R werden alle Duplikatzeilen entfernt.
Bei fehlender Klammerung wird INTERSECT vor UNION und EXCEPT ausgewertet. UNION und EXCEPT haben gleiche Priorität und werden bei fehlender Klammerung von links nach rechts ausgewertet.