Czy jest jakaś różnica między umieszczeniem aliasu kolumny na początku lub na końcu definicji kolumny?

12

Zawsze widziałem i zapisywałem moje aliasy kolumn jako

SELECT 1 as ColumnName

ale dzisiaj natrafiłem na zapytanie, które wykorzystało

SELECT ColumnName = 1

Czy jest jakaś różnica w sposobie wykonywania tych dwóch zapytań? A może wśród DBA istnieje standard, którego użyć?

Osobiście uważam, że 2. byłoby łatwiejsze do odczytania / utrzymania dla dłuższych definicji kolumn (dobry przykład tutaj z tego artykułu ), jednak nigdy nie widziałem drugiej składni używanej dzisiaj, więc zastanawiam się, czy jest jakiś powód, dla którego nie powinienem być Użyj tego.

Rachel
źródło
2
Zauważ, że forma przypisania aliasingu komentarzy nie jest przenośna, więc chociaż sprawia, że ​​rzeczy są dość czytelne, gdy wykonujesz DUŻO wyprowadzonej pracy z kolumnami, może być denerwujące, aby później przekonwertować ją na inny DBMS.
Cade Roux
@Cade Celko cały czas spiera się o pewne rzeczy. Jeśli będę musiał przekonwertować bazę kodów SQL Server na Oracle, PG lub MySQL, składanie aliasów będzie najmniejsze z moich zmartwień. Ponieważ, w przeciwieństwie do Celko, nie interesuje mnie unikanie wszystkich zastrzeżonych funkcji na wypadek, gdybyśmy kiedykolwiek przenieśli całą naszą architekturę do innego RDBMS. Zastanawiam się, jak często to się dzieje poza klasą ...
Aaron Bertrand
@AaronBertrand Zgadzam się na masową konwersję. Przekształciłem wiele rzeczy w Teradata i to jest najmniejszy z problemów. To, co nadal się przydarza mi częściej, to importowanie całych danych surowej tabeli do własnego SQL Servera i tworzenie na nim widoków lub zapytań lub cokolwiek innego, co robię w celu ich analizy, a następnie napiszę zapytanie lub proc dla źródła dialekt systemowy, który ma zostać wywołany z SSIS lub cokolwiek innego, aby uzyskać TYLKO dokładnie te dane, które chcę przez sieć. W takich przypadkach świadomie piszę bardzo ogólny SQL w stylu ANSI. A potem wciąż muszę zmieniać rzeczy, takie jak funkcje randkowe.
Cade Roux

Odpowiedzi:

17

Nie ma różnicy w podstawowej funkcjonalności dwóch rodzajów aliasingu (w asprzeciwieństwie do =). Sprowadza się do dokładnie tego, o czym wspomniałeś: Czytelność i łatwość konserwacji.

Moim zdaniem, pierwsza ( <Expression> as <Alias>) jest znacznie bardziej czytelna, ponieważ sama wyjaśnia. Jeśli tak SELECT ColumnName = 1, myślę, że łatwo byłoby pomylić to z ustawieniem zmiennej w te długie, zmęczone noce. Możesz pomylić to jako SELECT @ColumnName = 1i to będzie zupełnie inna funkcjonalność. Dlatego, aby ominąć jakąkolwiek możliwość zapytania „podwójne spojrzenie”, lub nawet gorzej… błąd w zrozumieniu / kodowaniu, idę ze SELECT 1 as ColumnName100% przypadków.

Osobiste preferencje, ale konsekwencja (dla ciebie i twojego zespołu) jest królem . Cokolwiek znajdziesz najłatwiej, idź i rób to cały czas. Nie ma nic bardziej frustrującego niż przełączanie się w przód i w tył dla kogoś, kto rozwiązuje problem / przegląda / utrzymuje kod.

Trzecim nie wymienionym sposobem jest użycie <Expression> <Alias>. Innymi słowy, Twój drugi sposób bez assłowa kluczowego. Myślę, że to jest tak samo złe jak =symbol. Brakuje czytelności na zysk czego? Nie wpisuję trzech dodatkowych znaków ( asi spacji). Nie warty tego.

Dla celów przesady spójrz na takie zapytanie:

use AdventureWorks2012;
go

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

Nie kod, który chciałbym sprawdzić.

Thomas Stringer
źródło
5
zawsze denerwuje mnie widok ostatniego, w którym wykluczają słowo kluczowe „as”. Nie jest wymagany, ale trudny do odczytania, gdy patrzy się na kilka kodów.
10

Osobiście uważam, że alias = expressionłatwiej jest je czytać i rozumieć. Powodem jest to, że kiedy rozwiązuję problem z SELECTwyrażeniem zawierającym długie wyrażenia, prawdopodobnie chcę znaleźć wyrażenie według nazwy kolumny, a nie na odwrót. Szybko znajdź wyrażenie, które aplikacja widzi jako alias2:

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

To moja preferencja. Twoje mogą być inne. Nie ma żadnej prawdziwej korzyści z używania jednego lub drugiego, z wyjątkiem powodów subiektywnych / smakowych. Ważne jest, aby wybrać jeden sposób, aby to zrobić i robić to konsekwentnie (i chyba że rzucisz monetą, będziesz w stanie obronić swój wybór, gdy spotkasz kogoś, kto lubi inną drogę). Ale jeśli napiszesz kod dla DBA tak wybrednego jak ja, przygotuj się na jego przepisanie. :-)

Napisałem o tym na blogu .

Jedną z rzeczy, która wydaje mi się jeszcze silniejsza, jest stosowanie pojedynczych cudzysłowów wokół nazw aliasów, np

column AS 'alias'
'alias' = column

Jedna forma jest przestarzała, ale obie są bardzo trudne do odczytania - i wielu początkujących myli alias jako dosłowny ciąg, ponieważ tak to wygląda. Z tych samych powodów absolutnie nie znoszę używania podwójnych cudzysłowów ( "alias"). Jeśli musisz uciec od swojego aliasu, ponieważ jest to słowo zastrzeżone lub jest źle wybrane lub sformatowane, użyj [square brackets].

Aaron Bertrand
źródło
2
Całkowicie zgadzam się na aspekt cytatów. Jeśli chodzi o długie wyrażenie, osobiście używam znaków powrotu karetki i tabulacji nowego wiersza, a następnie umieszczam as <Alias>ostatni wiersz definicji kolumny. Ale zdecydowanie się zgadzam, to tak osobiste, jak lubisz swoją kawę.
Thomas Stringer
@ThomasStringer zobacz wolę powrócić wyrażenie. Jeśli linia zaczyna się od AS Aliastego, ASnie jest to bardzo przydatne, gdy skanuję pionowo w poszukiwaniu konkretnej nazwy tabeli. Założę się, że nie zgodzilibyśmy się również, gdzie umieścić przecinki. :-)
Aaron Bertrand
Próbowałem raz użyć pojedynczych cudzysłowów wokół moich aliasów kolumn, ponieważ sprawiły, że stały się one czerwone, co wyróżniało się w SSMS, ale irytacje związane z tak szybkim wpisywaniem klawisza cytatu stały się dla mnie zbyt duże i powróciłem do swoich leniwych sposobów. Poza tym nie działało to tak dobrze, jak w zamierzonych celach, gdy w zapytaniu miałem ciągi znaków. Prawdopodobnie pozostanę przy AStym, ponieważ właśnie tego używamy teraz (zwykle dodam wcześniej nową AS ColumnNamelinię, więc z grubsza się wyrównują), ale zgadzam się, że =jest to bardziej czytelne w dłuższych definicjach kolumn.
Rachel
2
@AaronBertrand Moim argumentem za umieszczeniem przecinków na pierwszym miejscu jest to, że łatwiej jest ustalić, gdzie zaczyna się definicja kolumny, szczególnie w przypadku definicji wiersza z wieloma wierszami.
Rachel
1
@AaronBertrand Zwykle nie pracuję z rozsądnie wciętym kodem>. <
Rachel