Tabellen und Spalten Aliasse in der from-Klausel


Du weißt vielleicht schon, wie man Spalten- und Tabellen-Aliasse0 vergibt. Es könnte jedoch gut sein, dass du nicht weißt, wie man die Spalten einer Tabelle in der from-Klausel umbenennt.

Wie so oft ist die Syntax sehr einfach: einem Tabellen-Alias kann eine in Klammern gesetzte Spaltenliste folgen:

FROM … [AS] alias [(<derived column list>)]

Leider hat diese Syntax ihre Tücken, weil die sie Aliasse in der Reihenfolge der Spalten in der Tabelle zuweist. Es ist generell eine schlechte Praxis sich auf die Position einzelner Spalten in einer Tabelle zu verlassen – darum wollten doch erst sinnvolle Spaltenname definieren! Es geht aber noch weiter: In standard-konformen SQL muss für jede Tabellenspalte ein Alias vergeben werden1. Man kann nicht nur einen Alias für die erste Spalte vergeben. Alle oder keine. Und jetzt denke bitte darüber nach, was passiert, wenn man dieser Tabelle eine neue Spalte hinzufügt?2

Dennoch ist es wichtig, dass man Spalten auf Basis Ihrer Position umbenennen kann: manche Spalten haben nämlich keinen Namen, oder einen unbekannten Namen. Das trifft vor allem auf das Ergebnis von Tabellen-Funktionen, unnest und values zu.

Anwendungsfälle

Konforme Alternatives

Derselbe Effekt kann mit der with-Klausel erreicht werden (Beispiel siehe Anwendungsfall).

Kompatibilität

Spalten in der from-Klausel umzubennenen war bereits in forgeschrittenem SQL-92 vorgesehen3 und wurde mit SQL:1999 sogar verpflichtend in Core SQL aufgenommen4. Die Umsetzung ist dennoch lückenhaft.

Erwähnenswert ist auch, dass Entry-Level SQL-92 konformen Systeme das optionale Schlüsselwort as vor dem Tabellenalias nicht unterstützen müssen5. Datenbanken, die fortgeschrittenes oder volles SQL-92 unterstützten, oder Core SQL:1999 oder später erfüllen, müssen as vor dem Tabellenalias akzeptieren. Die beste Portabilität erhält man dennoch, wenn man as weglässt:

Über den Autor

Foto von Markus Winand

Markus Winand lehrt effizientes SQL – inhouse und online. Er minimiert die Entwicklungszeit durch modernes SQL und optimiert die Laufzeit durch schlaue Indizierung – dazu hat er auch das Buch SQL Performance Explained veröffentlicht.

Kaufen Sie sein Buch bei Amazon

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Bei Amazon kaufen
(Taschenbuch)

Taschenbuch und PDF auch auf Markus' Webseite erhältlich.

Holen Sie sich Markus

…für ein Training ins Büro.

Sein beliebtes Training stimmt Entwickler auf SQL Performance ein.

Erfahren Sie mehr»

Fußnoten

  1. Obwohl „Alias“ der gängige Begriff ist, ist „umbenennen“ treffende (dieser Begriff wird auch im Standard verwendet). Mit Alias meint man meist eine zusätzlichen Namen für etwas. Die SQL-Funktion die hier beschrieben wird benennt die Objekte effektiv um: unter dem ursprünglichen Namen kann nicht mehr auf sie zugegriffen werden.

    Ich verwende hier weiterhin „Alias“ um eine Verwechslung mit dem Umbenennen von Tabellen und Spalten mittels alter zu vermeiden (das ist zwar nicht Standard, aber manche Produkte können es dennoch).

  2. SQL:2016-2: §7.6, Syntax Rule 11bii1B

  3. Anweisungen, die diese Funktion nutzen, werden fehlschlagen. Oder, um es positiv zu formulieren: man muss alle Abfragen suchen, die Spalten dieser Tabelle in der from-Klausel umbenennen und die neue Spalte ebenfalls anführen.

  4. SQL:92, §6.3, Leveling Rule 2c.

  5. E051-09 “Rename columns in the FROM clause” in SQL:1999 and later.

  6. SQL:92, §6.3, Leveling Rule 2b.

„modern SQL“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz | CC-BY-NC-ND 3.0 Lizenz