Last Update: 2024 - 05 - 21 |
Aliase in SQL – Unersetzliche kleine Helferby Philipp Stiefel, ursprünglich veröffentlicht am 04. Oktober 2016 Foto von veeterzy, hier verwendet unter CC0 licensing Die Sprache SQL (Structured Query Language) hat eine umfangreiche Syntax und Vokabular. Viele haben schon damit zu kämpfen, die Grundlagen von INSERT, SELECT, UPDATE und DELETE zu lernen. Wenn du das geschafft hast, gib es einen Haufen weniger häufig verwendeter Nuancen der Sprache zu lernen. Es ist keine Überraschung, dass Anfänger in SQL einen kleinen Aspekt der SQL Syntax übersehen, der auf den ersten Blick nicht essenziell erscheint. Experten der Sprache kennen diese kleinen Helfer gut und benutzen sie ständig, vergessen aber häufig sie den Anfängern zu erklären, denn sobald man sie gemeistert hat, erscheinen sie so klein und trivial. Heute möchte ich diese Situation verbessern. Ich werde dir die Aliase in der SQL-Programmiersprache vorstellen. Einen Alias definierenAliase sind „Ersatznamen“ für die Spalten und Tabellen, die du in deinen SQL-Statements verwendest. Sie sind sehr einfach zu erstellen und zu verwenden. Das Schlüsselwort um einen Alias zu erstellen ist AS. Du verwendest das AS-Schlüsselwort, um einen neuen Namen für eine Spalte oder eine Tabelle in deinem SQL-Statement festzulegen. Streng genommen ist das Schlüsselwort AS in einigen Fällen optional. Dennoch empfehle ich es immer zu benutzen, wenn du beginnst Aliase zu verwenden, da es klarer macht was dort passiert. Aliase für SpaltenLass uns damit beginnen, uns ein Beispiel für einen Alias für eine Spalte anzuschauen. Hier ist ein einfaches Beispiel:
SELECT ColumnWithACrazyWeirdVeryLongName AS SimpleName
FROM tblYourTable;
In der Ergebnismenge der Abfrage werden die Daten der Tabellenspalte ColumnWithACrazyWeirdVeryLongName in der Ausgabespalte SimpleName angezeigt. Der alias in dem obigen Beispiel ist komfortabel, aber du könntest argumentieren, dass er nur begrenz nützlich ist, denn…
Es gibt viele Situationen in denen du Aliase verwenden kannst, um deine SQL Statement einfacher zu schreiben und besser lesbar zu machen. Es gibt aber auch einige Szenarios, in denen du Aliase verwenden musst, um die gewünschte Abfrage überhaupt schreiben zu können. Die Situation ist eine andere, wenn du das Ergebnis einer Berechnung in deiner Abfrage ausgeben willst. Da die berechnete Ausgabespalte keinen eigenen Namen hat, benötigst du einen Alias, um der Ausgabespalte einen Namen zuzuweisen.
SELECT ItemPrice * Quantity AS ExtendedPrice
FROM tblOrders;
Hier brauchst du den Alias. Andernfalls bekommst du Probleme die Ergebnisse zu verarbeiten oder darzustellen. Manche Datenbanksysteme, z.B. Microsoft Access, behandeln den technischen Aspekt des Problems, indem sie automatisch einen Alias für die Spalte vergeben. Dies resultiert aber in einem hässlichen Namen, wie Expr1 oder Audr1, der keinerlei Bedeutung transportiert und zwingend für Verwirrung sorgt, wenn du mehrere berechnete Spalten in der Abfrage hast. – Also, verwende hier einen Alias! Aliase für TabellennamenDu kannst auch Aliase für Tabellennamen vergeben. Bei einfachen Abfrage, die nur auf einer einzelnen Tabelle basieren, macht das wenig Sinn, aber sobald du mehr als eine Tabelle verwendest, ist es sehr bequem mit Aliasen für die Tabellennamen zu arbeiten. Bessere LesbarkeitVergleiche die beiden folgenden SQL-Statements.
SELECT tblCustomer.CustomerName,
tblAddress.Street,
tblAddress.City,
tblAddress.ZIP,
tblServiceAppointment.AppointmentDate,
tblServiceAppointment.Description
FROM tblCustomer
INNER JOIN tblAddress
tblCustomer.AddressId = tblAddress.AddressId
INNER JOIN tblServiceAppointment
ON tblCustomer.CustomerId = tblServiceAppointment.CustomerId;
SELECT c.CustomerName,
a.Street,
a.City,
a.ZIP,
sa.AppointmentDate,
sa.Description
FROM tblCustomer AS c
INNER JOIN tblAddress AS a
c.AddressId = a.AddressId
INNER JOIN tblServiceAppointment AS sa
ON c.CustomerId = sa.CustomerId;
Welches von beiden ist besser lesbar? – Ich bevorzuge sehr deutlich das Statement mit den Aliasen. Es ist auch viel weniger Aufwand das Statement zu schreiben. Solltest du später eine der Tabellen umbenennen müssen oder durch eine Abfrage (mit gleicher Struktur) ersetzen wollen, dann musst du nur an einer einzigen Stelle den Tabellennamen ändern. – Praktisch, oder? Ich verwende Aliase für die Tabellennamen bei absolut jeder Abfrage mit mehr als einer Tabelle. Erforderliche AliaseIn dem obigen Beispiel war es immer noch optional die Aliase zu verwenden, aber es kann durchaus vorkommen, dass du zwingend Aliase verwenden musst, um ein SQL-Statement zu schreiben. Lass uns das obige Beispiel etwas erweitern.
SELECT c.CustomerName,
ca.Street AS CustomerStreet,
ca.City AS CustomerCity,
ca.ZIP AS CustomerZIP,
sa.AppointmentDate,
sa.Description,
st.TechnicianName,
ta.Street AS TechnicianStreet,
ta.City AS TechnicianCity,
ta.ZIP AS TechnicianZIP
FROM tblCustomer AS c
INNER JOIN tblAddress AS ca
c.AddressId = ca.AddressId
INNER JOIN tblServiceAppointment AS sa
ON c.CustomerId = sa.CustomerId
INNER JOIN tblServiceTechnician st
ON sa.TechnicianId = st.TechnicianId
INNER JOIN tblAddress ta
ON st.AddressId = ta.AddressId;
Siehst du was hier passiert? Wir haben eine allgemeine Tabelle tblAddress in unserer Datenbank, die alle Adressen enthält. Nun wollen wir in einer Abfrage die Adresse eines Kunden sowie die Adresse eines zugeordneten Servicetechnikers darstellen. Um das gewünschte Abfrageergebnis zu erreichen, müssen wir sowohl die Tabelle tblAddress zweimal zu der Abfrage hinzufügen, als auch Spalten aus dieser Tabelle jeweils zweimal zu der Ausgabeliste hinzufügen. Eine Abfrage zu erstellen, die mehrfach ein und dieselbe Tabelle referenziert, wäre unmöglich ohne Alias. Dann gäbe es keine Möglichkeit die verschiedenen Instanzen dieser einen Tabelle innerhalb der Abfrage auseinanderzuhalten. Durch die jeweiligen Aliase für die Tabelleninstanzen bekommt jede davon eine eindeutige Identität innerhalb der Abfrage. Mit den Aliasen für sowohl die Tabellen als auch die Spaltennamen der Tabelle tblAddress ist diese Abfrage immer noch lesbar und gut verständlich. – Ohne Aliase wärst du in diesem Fall komplett verloren. Einschränkungen von Aliasen – GeltungsbereichAliase sind sehr hilfreiche, aber wir müssen zur Kenntnis nehmen, dass ihre Mächtigkeit nur begrenzt ist. Die größte Einschränkung ist ihr Geltungsbereich. Aliase deklarieren einen neuen Namen für eine Tabelle oder Spalte nur nach außen hin. Es mag auf den ersten Blick nicht offensichtlich sein, aber SQL Statements sind hierarchisch. In der Select-Liste (die Liste der Ausgabespalten) einer Abfrage kannst du nur Tabellen (oder andere Objekte) referenzieren, die in der zugrundeliegenden From-Klausel enthalten sind. Wenn du in der From-Klausel einen Alias definierst, ist dieser überall in der Abfrage verwendbar, denn die From-Klausel ist die unterste Ebene einer Auswahlabfrage. Wenn du einen Alias in der Ausgabeliste der Abfrage definierst, wird dieser Alias nur auf höheren, äußeren Ebenen sichtbar werden. Da die Select-Liste bereits die höchste Ebene der Abfrage ist, sind Aliase die du dort definierst, nicht innerhalb der Abfrage sichtbar. Lass uns als Beispiel, die einfache Berechnung von oben noch einmal anschauen.
SELECT ItemPrice * Quantity AS ExtendedPrice
FROM tblOrders;
Der Alias ExtendedPrice wird außerhalb der Abfrage wirksam. Also z.B. aus der Perspektive eines Clients, der diese Abfrage ausführt. Er ist aber nirgendwo innerhalb der Abfrage sichtbar. Du kannst ihn nicht als Grundlage für eine weitere Berechnung verwenden oder ihn in der Where-Bedingung oder der Order-By-Klausel referenzieren. Dies funktioniert nicht:
SELECT ItemPrice * Quantity AS ExtendedPrice,
So unbequem das auch ist, um das beabsichtigte Ergebnis dieser Abfrage zu erzielen, musst du den ursprünglichen Berechnungsausdruck erneut an beiden Stellen wiederholen. Dies funktioniert so:
SELECT ItemPrice * Quantity AS ExtendedPrice,
(ItemPrice * Quantity) * TaxFactor AS TotalPrice
FROM tblOrders
ORDER BY (ItemPrice * Quantity) DESC;
Es wäre toll, wenn die erste Variante auch funktionieren würde, aber das ist leider nicht möglich. Gefahren der AliaseAufgrund ihrer beschränkten Mächtigkeit, bestehen bei der Verwendung von Aliasen nur geringe Gefahren. Ich möchte deine Aufmerksamkeit auf zwei Situationen lenken, in denen du Aliase vorsichtig verwenden musst, um keine unbeabsichtigten Ergebnisse zu erhalten. Bestehende Spaltennamen überschreibenDu kannst Aliase verwenden, um einen bereits existierenden Spaltennamen zu überschreiben. Dies kannst du verwenden, um die Anwendungslogik einer Datenbankanwendung bereits auf Ebene der Datenbank zu ändern, ohne die darüber liegenden Schichten anzufassen. Angenommen es gibt eine gespeicherte Abfrage (View, Function, or…), die konsistent in allen Teilen der Anwendung verwendet wird, dann kannst du dort die Datenausgabe verändern, ohne die darüber liegenden Schichten anpassen zu müssen.
SELECT WidgetPrice * 1.1 AS WidgetPrice
FROM tblWidget;
Verwende dies immer mit großer Vorsicht. Solange man sich nicht das SQL-Statement dieser Abfrage genau anschaut, ist es nicht erkennbar, dass diese Abfrage nicht den eigentlichen WidgetPrice aus der Tabelle ausgibt. (Keine) Eindeutigkeit von Aliasen und NamenBei den meisten DBMS (Datenbank Management Systeme) ist es möglich den Namen einer bestehenden Spalte, die ebenfalls in der Ausgabeliste vorhanden ist als Alias-Namen für einen anderen Ausdruck zu verwenden. Um bei manchen DBMS ist es sogar möglich ein und denselben Alias mehrfach zu verwenden.
SELECT c.CustomerName,
ca.Street,
ca.City,
ca.ZIP + ' ' + ca.City AS City,
somethingcompletelydifferent AS City
FROM tblCustomer c
INNER JOIN tblAddress ca
c.AddressId = ca.AddressId;
Viele DBMS werden dieses Statement ohne Fehlermeldung ausführen. Was genau dabei passiert, hängt von dem jeweils verwendeten DBMS ab, aber ich versichere dir, dass dabei nichts Gutes herauskommen wird. Du musst also selbst darauf achten, dass du nicht versehentlich einen Begriff als Alias definierst, der bereits in der Abfrage verwendet wird. FazitAliase sind einfach zu verstehen und zu verwenden. Sie sind extrem hilfreich, um SQL-Statements einfacher zu schreiben, zu lesen und zu warten. Verwende sie ab heute.
Ich werde Deine Email-Addresse niemals weitergeben. Du kannst den Newsletter jederzeit abbestellen. © 1999 - 2024 by Philipp Stiefel - Datenschutzerklärung |