Gibt es einen Unterschied zwischen dem Platzieren eines Spaltenalias am Anfang oder am Ende der Spaltendefinition?

12

Ich habe meine Spaltenaliase immer als gesehen und geschrieben

SELECT 1 as ColumnName

aber heute stieß ich auf eine Abfrage, die verwendet wurde

SELECT ColumnName = 1

Gibt es einen Unterschied, wie diese beiden Abfragen ausgeführt werden? Oder gibt es einen Standard unter den DBAs, den man verwenden soll?

Persönlich denke ich, dass die zweite für längere Spaltendefinitionen leichter zu lesen / zu pflegen wäre (gutes Beispiel hier aus diesem Artikel ), aber ich habe die bisher verwendete zweite Syntax noch nie gesehen und frage mich, ob es einen Grund gibt, warum ich nicht sollte es benutzen.

Rachel
quelle
2
Beachten Sie, dass die Zuweisungsform des Kommentar-Aliasing nicht portierbar ist. Wenn Sie also eine Menge abgeleiteter Spaltenarbeiten ausführen, ist dies zwar gut lesbar, es kann jedoch ärgerlich sein, sie später in ein anderes DBMS konvertieren zu müssen.
Cade Roux
@Cade Celko argumentiert die ganze Zeit über bestimmte Dinge. Wenn ich eine SQL Server-Codebasis in Oracle, PG oder MySQL konvertieren muss, ist die Alias-Komposition die geringste meiner Sorgen. Da ich im Gegensatz zu Celko kein Interesse daran habe, alle proprietären Funktionen zu vermeiden, falls wir jemals unsere gesamte Architektur auf ein anderes RDBMS verlagern sollten. Ich frage mich, wie oft das wirklich außerhalb eines Klassenzimmers passiert ...
Aaron Bertrand
@AaronBertrand Ich stimme der Massenumwandlung zu. Ich habe ein paar Sachen nach Teradata konvertiert und dies ist das geringste Problem. Was mir weiterhin häufiger passiert, ist, dass ich ganze rohe Tabellendaten in meinen eigenen SQL Server importiere und Ansichten oder eine Abfrage dazu oder was auch immer ich mache, um sie zu analysieren, und dann eine Abfrage oder einen Prozess für die Quelle schreibe System-Dialekt von SSIS oder was auch immer angerufen werden, um genau die Daten zu erhalten, die ich über die Leitung haben möchte. In diesen Fällen schreibe ich bewusst sehr generisches SQL im ANSI-Stil. Und dann muss ich noch Dinge wie Datumsfunktionen ändern.
Cade Roux

Antworten:

17

Es gibt keinen Unterschied in der zugrunde liegenden Funktionalität der beiden Arten von Aliasing (im asGegensatz zu =). Worauf es ankommt, ist genau das, was Sie erwähnt haben: Lesbarkeit und Wartbarkeit.

Meiner Meinung nach ist Ersteres ( <Expression> as <Alias>) viel lesbarer, da es selbsterklärend ist. Wenn Sie haben, SELECT ColumnName = 1denke ich, wäre es ziemlich einfach, das als eine Variable in diesen langen, müden Nächten zu verwechseln. Sie könnten das als verwechseln SELECT @ColumnName = 1und das wäre eine völlig andere Funktionalität. Um die Möglichkeit der Abfrage "Double Look" oder noch schlimmer ... Fehler beim Verstehen / Codieren zu umgehen, gehe ich SELECT 1 as ColumnName100% der Zeit.

Persönliche Vorlieben, aber Konsequenz (für Sie und Ihr Team) ist König . Was immer Sie am einfachsten finden, machen Sie es die ganze Zeit mit. Es gibt nichts Frustrierenderes als das Hin- und Herwechseln bei der Fehlerbehebung, Überprüfung und Pflege von Code.

Der dritte nicht erwähnte Weg ist zu verwenden <Expression> <Alias>. Mit anderen Worten, Ihr zweiter Weg ohne das asSchlüsselwort. Ich denke das ist genauso schlimm wie das =Symbol. Es fehlt die Lesbarkeit zu gewinnen, was? Keine Eingabe von drei zusätzlichen Zeichen ( asund einem Leerzeichen). Ist es nicht wert.

Betrachten Sie zu Übertreibungszwecken eine Abfrage wie die folgende:

use AdventureWorks2012;
go

select
    [New Name] = Name,
    NewDepId = DepartmentID,
    GroupName as GName,
    ModifiedDate MyModDate
from HumanResources.Department;

Kein Code, den ich überprüfen möchte.

Thomas Stringer
quelle
5
Es ärgert mich immer, wenn ich das letzte sehe, bei dem das Schlüsselwort "as" ausgeschlossen wird. Nicht erforderlich, aber ein wenig zu lesen, wenn man sich eine Menge Code ansieht.
10

Persönlich finde ich alias = expressionleichter zu lesen und zu verstehen. Der Grund dafür ist, dass ich bei der Fehlerbehebung bei einer SELECTAnweisung mit langen Ausdrücken den Ausdruck wahrscheinlich über den Spaltennamen suchen möchte, nicht umgekehrt. Finden Sie schnell den Ausdruck, den die Anwendung sieht als alias2:

SELECT
  alias1 = (long expression with aggregates and multiple column references),
  (long expression with aggregates and multiple column references AS alias2
FROM ...

Das ist meine Präferenz. Ihre kann anders sein. Es gibt keinen wirklichen Vorteil, das eine oder das andere zu verwenden, außer aus subjektiven / geschmacklichen Gründen. Wichtig ist, dass Sie einen Weg wählen, um dies konsequent zu tun (und wenn Sie keine Münze werfen, können Sie Ihre Wahl verteidigen, wenn Sie auf jemanden stoßen, der den anderen Weg mag). Wenn Sie jedoch Code für einen DBA schreiben, der so pingelig ist wie ich, müssen Sie darauf vorbereitet sein, dass er umgeschrieben wird. :-)

Ich habe darüber gebloggt .

Eine Sache, bei der ich mich noch stärker fühle, ist die Verwendung von einfachen Anführungszeichen um Aliasnamen, z

column AS 'alias'
'alias' = column

Ein Formular ist veraltet, aber beide sind sehr schwer zu lesen - und viele Neulinge verwechseln den Alias ​​als String-Literal, da es so aussieht. Aus den gleichen Gründen verabscheue ich die Verwendung von doppelten Anführungszeichen ( "alias"). Wenn Sie sich von Ihrem Alias ​​entfernen müssen, weil es sich um ein reserviertes Wort handelt oder auf andere Weise schlecht ausgewählt oder formatiert ist, verwenden Sie [square brackets].

Aaron Bertrand
quelle
2
Stimmen Sie dem Aspekt der Zitate voll und ganz zu. Was den langen Ausdruck betrifft, benutze ich persönlich Zeilenumbrüche und Zeilenumbrüche und setze dann das Zeichen as <Alias>in die letzte Zeile der Spaltendefinition . Aber definitiv einverstanden, es ist so persönlich, wie Sie Ihren Kaffee mögen.
Thomas Stringer
@ThomasStringer sehe, ich würde lieber den Ausdruck Wagenrücklauf. Wenn eine Zeile damit beginnt AS Alias, ASist dies nicht sehr nützlich, wenn ich vertikal nach einem bestimmten Tabellennamen scanne. Ich wette, wir sind uns nicht einig, wo wir auch die Kommas setzen sollen. :-)
Aaron Bertrand
Ich habe versucht, meine Spalten-Aliase mit einfachen Anführungszeichen zu versehen, weil sie dadurch rot wurden, was in SSMS auffiel, aber der Ärger, den Anführungszeichen-Schlüssel so oft zu tippen, wurde mir schnell zu viel und ich fiel auf meine faulen Wege zurück. Außerdem hat es für die beabsichtigten Zwecke nicht so gut funktioniert, als ich Zeichenfolgen in meiner Abfrage hatte. Ich werde wahrscheinlich ASweitermachen, da wir dies im Moment verwenden (normalerweise füge ich eine neue AS ColumnNameZeile hinzu, damit sie grob ausgerichtet sind), aber ich stimme zu, dass dies =in längeren Spaltendefinitionen viel besser lesbar ist.
Rachel
2
@AaronBertrand Mein Argument für das Voranstellen der Kommas ist, dass es einfacher ist zu erkennen, wo eine Spaltendefinition beginnt, insbesondere bei mehrzeiligen Spaltendefinitionen.
Rachel
1
@ AaronBertrand Ich arbeite normalerweise nicht mit vernünftig eingerücktem Code>. <
Rachel