## Selektierte Spalte (select_column)

Selektierte Spalten (select_column) müssen in einer QUERY-Spezifikation angegeben werden, um eine Ergebnistabelle zu spezifizieren.

Die Folge von selektierten Spalten definiert die Spalten der Ergebnistabelle. Die Spalten der Ergebnistabelle ergeben sich aus den Spalten der Zwischenergebnistabelle, gegebenenfalls ergänzt durch ROWNO-Spalten (rowno_column) bzw. STAMP-Spalten (stamp_column). Die Spalten der Zwischenergebnistabelle werden durch die FROM-Klausel des Tabellenausdrucks bestimmt. Die Reihenfolge der Spaltennamen der Zwischenergebnistabelle wird durch die Reihenfolge der Tabellennamen in der FROM-Klausel bestimmt.

### Syntax

<select_column> ::= <table_columns> | <derived_column> | <rowno_column> | <stamp_column>

<table_columns> ::= * | <table_name>.* | <reference_name>.*
<derived_column> ::= <expression> [ [AS] <result_column_name>]
<rowno_column> ::= ROWNO [ [AS] <result_column_name>]
<stamp_column> ::= STAMP [ [AS] <result_column_name>]

<result_column_name> ::= <identifier>

### Beispiele

SQL-Tutorial, Auswählen und Anordnen von Zeilen, Auswählen, Anordnen und Umbenennen von Spalten

### Erläuterung

Jeder als selektierte Spalte select_column angegebene Spaltenname muss eindeutig eine Spalte einer der QUERY-Spezifikation zugrundeliegenden Tabellen bezeichnen. Gegebenenfalls ist der Spaltenname durch den Tabellennamen zu qualifizieren.

Die Angabe einer Spalte des Datentyps LONG in einer selektierten Spalte ist nur in der obersten Folge von selektierten Spalten in einer QUERY-Anweisung oder SINGLE SELECT-Anweisung zulässig, wenn dort nicht die DISTINCT-Spezifikation verwendet wurde.

Die Angabe einer Spalte des Datentyps LONG in einer selektierten Spalte ist nur in der obersten Folge von selektierten Spalten in einer CREATE VIEW-Anweisung, der genau eine Basistabelle zugrundeliegt, zulässig.

Wenn eine selektierte Spalte eine Set-Funktion enthält, darf die Folge der selektierten Spalten, zu der sie gehört, keine Tabellenspalten table_columns enthalten, und jeder in einem Ausdruck expression auftretende Spaltenname muss eine Gruppierspalte bezeichnen, oder der Ausdruck muss sich aus Gruppierspalten zusammensetzen.

Die Angabe skalarer Subqueries ist möglich.

#### <table_columns>

Die Angabe von Tabellenspalten table_columns in einer selektierten Spalte ist eine Abkürzung für die Angabe der Spalten der Ergebnistabelle.

· Wird nur eine selektierte Spalte der Art * angegeben, so ist das eine Abkürzung für die Angabe aller Spalten der Zwischenergebnistabelle in unveränderter Reihenfolge.
Spalten, für die der Benutzer nicht das SELECT-Privileg hat, und die implizit angelegte Spalte SYSKEY werden nicht übernommen.

· Die Angabe von <table_name>.* oder <reference_name>.* ist eine Abkürzung für die Angabe aller Spalten der zugrundeliegenden Tabelle. Der erste Spaltenname der Ergebnistabelle wird vom ersten Spaltennamen der zugrundeliegenden Tabelle übernommen, der zweite Spaltenname der Ergebnistabelle entspricht dem zweiten Spaltennamen der zugrundeliegenden Tabelle, usw. Die Reihenfolge der Spaltennamen der zugrundeliegenden Tabelle entspricht der bei der Definition der zugrundeliegenden Tabelle festgelegten Reihenfolge.
Spalten, für die der Benutzer nicht das SELECT-Privileg hat, und die implizit angelegte Spalte SYSKEY werden nicht übernommen.

#### <derived_column>

Die Angabe einer Ergebnistabellenspalte derived_column in einer selektierten Spalte definiert eine Spalte der Ergebnistabelle.

· Wenn eine Spalte der Ergebnistabelle die Form <expression> [AS] <result_column_name> hat, erhält diese Ergebnisspalte den Namen result_column_name.

· Wenn kein result_column_name angegeben ist und der Ausdruck expression eine Spaltenspezifikation ist, die eine Spalte der Zwischenergebnistabelle bezeichnet, erhält die Spalte der Ergebnistabelle den Spaltennamen der Zwischenergebnistabelle.

· Wenn kein result_column_name angegeben ist und der Ausdruck keine Spaltenspezifikation ist, erhält die Spalte den Namen EXPRESSION_, wobei "_" eine maximal vierstellige Zahl bedeutet, beginnend mit EXPRESSION1, EXPRESSION2, usw.

#### <rowno_column>

Eine ROWNO-Spalte rowno_column darf nur in einer selektierten Spalte spezifiziert werden, die zu einer QUERY-Anweisung gehört.

Bei Angabe einer ROWNO-Spalte wird eine Spalte vom Datentyp FIXED(10) mit dem Namen ROWNO erzeugt. Sie enthält die Werte 1, 2, 3,..., welche eine Numerierung der Zeilen der Ergebnistabelle darstellen.

Wenn die ROWNO-Spalte in der Form ROWNO [AS] <result_column_name> angegeben wurde, erhält diese Ergebnisspalte den Namen result_column_name.

Über eine ROWNO-Spalte darf nicht mittels ORDER BY sortiert werden.

#### <stamp_column>

Eine STAMP-Spalte stamp_column darf nur in einer selektierten Spalte spezifiziert werden, die zu einem QUERY-Ausdruck (query_expression) einer INSERT-Anweisung gehört.

Das Datenbanksystem ist in der Lage, eindeutige Werte zu generieren. Dabei handelt es sich um eine fortlaufende Nummer, die bei X'000000000001' beginnt. Die Werte werden aufsteigend vergeben, wobei nicht sichergestellt werden kann, dass eine Folge von Werten lückenlos ist.

Die Angabe einer STAMP-Spalte liefert pro Zeile der Zwischenergebnistabelle den nächsten vom Datenbanksystem generierten Wert vom Datentyp CHAR(8) BYTE.

#### Weitere Informationen

Jede Spalte einer Ergebnistabelle hat den gleichen Datentyp, die gleiche Länge, die gleiche Genauigkeit und die gleiche Anzahl von Nachkommastellen wie die derived_column oder die zugrundeliegende Spalte der Tabellenspalten table_columns.

Für die Datentypen DATE und TIMESTAMP trifft dies nicht zu. Um die Darstellung jedes Datums- und Zeitformats zu ermöglichen, wird die Länge der Spalte der Ergebnistabelle auf die maximal notwendige Länge zur Darstellung eines Datumswertes (Länge 10) bzw. eines Zeitstempelwertes (Länge 26) gesetzt.