tabellenangabe ::= {
tabelle [[AS]
korrelationsname [(
spalte , ...)]] |
unterabfrage [AS]
korrelationsname [(
spalte , ...)] |
TABLE([
catalog .]
tabellenfunktion ) [WITH ORDINALITY]
[[AS]
korrelationsname [(
spalte , ...)]] |
join_ausdruck }
tabelle
Name einer Basistabelle oder eines View.
Dieselbe Tabelle kann mehrmals in einer Tabellenangabe im Abfrage-Ausdruck vorkommen. Um unterschiedliche Vorkommen derselben Tabelle unterscheiden zu können, werden Korrelationsnamen verwendet.
unterabfrage
Die Tabelle ist die Ergebnistabelle der Unterabfrage unterabfrage.
[
catalog.]
tabellenfunktion
Die („read-only“) Tabelle (siehe „ Basishandbuch“) ist das Ergebnis der Tabellenfunktion tabellenfunktion.
Wenn die Tabellenfunktion DEE() angegeben ist, dann dürfen keine Spaltennamen angegeben werden.
Der Datenbankname catalog muss angegeben werden, wenn die enthaltende Anweisung nicht auf der implizit eingestellten Datenbank (siehe "Qualifizierte Namen") ausgeführt werden soll (und daher ggf. auch mit einem anderen SQL-Server).
WITH ORDINALITY
Definition einer Zählspalte in der Ergebnistabelle. Diese Angabe darf nur für die Tabellenfunktion CSV(), nicht aber für DEE() angegeben werden.
Die Ergebnistabelle muss „am Ende“ eine Spalte mehr besitzen als die Spaltenangaben in jeder Zeile der CSV-Datei. Der Datentyp der letzen Spalte der Ergebnistabelle muss DECIMAL(31,0) sein. Diese Spalte dient als Zählspalte. Sie erhält, mit 1 beginnend, aufsteigend die Ordnungszahl der eingelesenen Zeile der CSV-Datei.
Mit der WHERE-Klausel können in einem SELECT-Ausdruck auch Ergebnissätze bestimmter Ordnungszahlen ignoriert werden, siehe das Beispiel auf der nächsten Seite.
Die Datentypen jeder Spalte der Ergebnistabelle (mit Ausnahme der letzen Spalte) müssen mit den Datentypen der Spaltenangaben in der CSV-Datei übereinstimmen.
WITH ORDINALITY nicht angegeben:
Die Anzahl der Spalten der Ergebnistabelle muss der Anzahl der Spaltenangaben in der CSV-Datei entsprechen und die Datentypen jeder Spalte müssen übereinstimmen.
Beispiel
Es sei mit.3.kopfzeilen
eine CSV-Datei mit genau 3 Überschriftszeilen, die nicht ausgewertet bzw. überlesen werden sollen:
SELECT c1, c2,...,cn FROM TABLE(CSV('mit.3.kopfzeilen' DELIMITER ',' QUOTE '?' ESCAPE '-', CHAR(20), CHAR(20),..., CHAR(20))) WITH ORDINALITY AS T(c1, c2,....,cn, counter) WHERE counter > 3
korrelationsname
Tabellenname, der innerhalb des Abfrage-Ausdrucks eine Umbenennung für eine Tabelle ist.
Bei jeder Spaltenangabe, die sich auf diese Angabe der Tabelle bezieht, müssen Sie den Spaltennamen mit korrelationsname qualifizieren, wenn der Spaltenname nicht eindeutig ist.
Der neue Name muss eindeutig sein, d.h. korrelationsname darf nur einmal in einer Tabellenangabe dieses Abfrage-Ausdrucks vorkommen.
Sie müssen eine Tabelle umbenennen, wenn im Abfrage-Ausdruck die Spalten der Tabelle ohne Umbenennung nicht eindeutig angegeben werden können.
Bei tabellenfunktion muss korrelationsname angegeben werden (Ausnahme: DEE()).
Außerdem können Sie eine Tabelle umbenennen, um durch entsprechende Namen einen Abfrage-Ausdruck verständlicher zu formulieren oder um lange Namen abzukürzen..
Beispiel
Tabelle mit sich selbst verknüpfen:
SELECT a.firma, b.firma -- Kunden abfragen, FROM kunde AS a, kunde AS b WHERE a.ort = b.ort -- die in demselben Ort wohnen AND a.knr < b.knr -- aber gleiche Paare vermeiden
spalte
Spaltenname, der innerhalb des Abfrage-Ausdrucks eine Umbenennung für die Spalte der dazugehörigen Tabelle ist.
Wenn Sie eine Spalte umbenennen, müssen Sie allen Spalten der Tabelle einen neuen Namen zuweisen.
spalte ist der neue Name der Spalte, der innerhalb der mit korrelationsname angegebenen Tabelle eindeutig sein muss. Die Spalte darf in diesem Abfrage-Ausdruck nur mit dem neuen Namen angesprochen werden.
Die Spalten einer Ergebnistabelle müssen umbenannt werden, wenn die Spaltennamen der zugrunde liegenden Tabellen nicht eindeutig sind oder wenn Ergebnisspalten mit intern vergebenen Namen angesprochen werden sollen.
Beispiel
Die Spalten der Tabelle LAGER sollen mit neuen, aussagekräftigeren Namen versehen werden:
SELECT * FROM lager l (artikelnummer, aktueller_bestand, lagerort)
WHERE lagerort = 'Teilelager'
spalte,... nicht angegeben:
Es gelten die Spaltennamen der zugehörigen Tabelle. Dies können intern vergebene Namen sein, die im Abfrage-Ausdruck nicht angesprochen werden können.
join_ausdruck
Join-Ausdruck, der die Tabellen bestimmt, aus denen Daten ausgewählt werden. Join-Ausdrücke sind im Abschnitt „Join-Ausdruck" beschrieben.
Zugrunde liegende Basistabellen
Abhängig von der Angabe in der Tabellenangabe ist sind die zugrunde liegenden Basistabellen wie folgt definiert:
Angabe in Tabellenangabe | zugrunde liegende Basistabellen |
Basistabelle | die Basistabelle |
View | alle Basistabellen, auf die sich der View direkt oder indirekt bezieht |
Unterabfrage | die der Unterabfrage zugrunde liegende Basistabelle |
| keine Basistabelle |
Tabelle 24: Zugrunde liegende Basistabellen