Existe alguma diferença entre colocar um alias de coluna no início ou no final da definição da coluna?

12

Eu sempre vi e escrevi meus aliases de coluna como

SELECT 1 as ColumnName

mas hoje deparei com uma consulta que usava

SELECT ColumnName = 1

Existe alguma diferença em como essas duas consultas são executadas? Ou existe um padrão entre os DBAs sobre qual deles usar?

Pessoalmente acho que o segundo seria mais fácil de ler / manter em definições de coluna mais longos (bom exemplo aqui a partir deste artigo ), no entanto eu nunca vi o 2º sintaxe usada antes de hoje, então estou querendo saber se há alguma razão eu não deveria ser usando isso.

Rachel
fonte
2
Observe que o formulário de atribuição de alias de comentários não é portátil, portanto, embora torne as coisas bastante legíveis quando você faz MUITO trabalho de coluna derivado, pode ser irritante ter que convertê-lo posteriormente para outro DBMS.
Cade Roux
@Cade Celko argumenta sobre certas coisas o tempo todo. Se eu tiver que converter uma base de código do SQL Server em Oracle ou PG ou MySQL, a composição do alias será a menor das minhas preocupações. Como, diferentemente da Celko, não tenho interesse em evitar todos os recursos proprietários, caso alguma vez movamos nossa arquitetura inteira para um RDBMS diferente. Gostaria de saber com que freqüência isso realmente acontece fora da sala de aula ...
Aaron Bertrand
@AaronBertrand Concordo em conversão em massa. Eu converti um monte de coisas para Teradata e esse é o menor dos problemas. O que continua acontecendo com mais frequência é que vou importar dados inteiros da tabela bruta para o meu próprio SQL Server e fazer exibições ou uma consulta nele ou o que quer que eu faça para analisá-lo e, em seguida, gravarei uma consulta ou proc para a origem dialeto do sistema a ser chamado a partir do SSIS ou o que quer que seja para obter exatamente os dados que desejo através do fio. Nesses casos, eu estou escrevendo conscientemente SQL muito genérico no estilo ANSI. E então eu ainda tenho que mudar as coisas como funções de data.
Cade Roux

Respostas:

17

Não há diferença na funcionalidade subjacente dos dois tipos de alias ( asao contrário de =). O que se resume é exatamente o que você mencionou: Legibilidade e manutenção.

Na minha opinião, o primeiro ( <Expression> as <Alias>) é muito mais legível, pois é auto-explicativo. Quando você tem SELECT ColumnName = 1, acho que seria muito fácil confundir isso como definir uma variável nessas longas noites cansadas. Você pode confundir isso como SELECT @ColumnName = 1e isso seria uma funcionalidade completamente diferente. Portanto, para contornar qualquer possibilidade da consulta "look duplo", ou ainda pior ... erro no entendimento / codificação, vou com SELECT 1 as ColumnName100% do tempo.

A preferência pessoal, mas a consistência (para você e para sua equipe) é o rei . O que você achar mais fácil, faça e faça isso o tempo todo. Não há nada mais frustrante do que alternar para alguém solucionar problemas / revisar / manter o código.

A terceira maneira não mencionada é usar <Expression> <Alias>. Em outras palavras, sua segunda maneira sem a aspalavra - chave. Eu acho que isso é tão ruim quanto o =símbolo. Falta legibilidade ao ganho de quê? Não digitando três caracteres extras ( ase um espaço). Não vale a pena.

Para fins de exagero, dê uma olhada em uma consulta como esta:

use AdventureWorks2012;
go

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

Não é um código que eu gostaria de revisar.

Thomas Stringer
fonte
5
sempre me incomoda ver o último, onde eles excluem a palavra-chave "as". Não é necessário, mas é difícil ler quando se olha para um monte de código.
10

Pessoalmente, acho alias = expressionmais fácil ler e compreender. O motivo é que, quando estou solucionando problemas de uma SELECTinstrução que possui expressões longas, provavelmente desejo encontrar a expressão pelo nome da coluna, e não o contrário. Rápido, encontre a expressão que o aplicativo vê como alias2:

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

Essa é a minha preferência. O seu pode ser diferente. Não há verdadeira vantagem em usar um ou outro, exceto por razões subjetivas / de gosto. O importante é que você escolha uma maneira de fazê-lo, e faça-o de forma consistente (e, a menos que você jogue uma moeda, seja capaz de defender sua escolha quando se deparar com alguém que gosta do outro lado). Mas se você escrever um código para um DBA tão exigente quanto eu, esteja preparado para ser reescrito. :-)

Eu escrevi sobre isso .

Uma coisa sobre a qual me sinto ainda mais forte é o uso de aspas simples em torno de nomes alternativos, por exemplo,

column AS 'alias'
'alias' = column

Um formulário está obsoleto, mas ambos são muito difíceis de ler - e muitos iniciantes confundem o alias como uma string literal, pois é assim que parece. Pelas mesmas razões, detesto absolutamente o uso de aspas duplas ( "alias"). Se você precisar escapar do seu alias por ser uma palavra reservada ou de outra forma mal escolhida ou formatada, use [square brackets].

Aaron Bertrand
fonte
2
Concordo totalmente com o aspecto das aspas. Quanto à expressão longa, o que eu pessoalmente faço é usar retornos de carro e tabulação de nova linha e, em seguida, colocar as <Alias>a última linha da definição da coluna. Mas definitivamente aceito, é tão pessoal quanto você gosta do seu café.
Thomas Stringer
@ThomasStringer vê que eu prefiro o carro retornar a expressão. Se uma linha começa com AS Aliasisso, ASnão é muito útil quando estou digitalizando verticalmente um nome de tabela específico. Aposto que também discordamos sobre onde colocar as vírgulas. :-)
Aaron Bertrand
Tentei usar aspas simples em torno dos aliases das minhas colunas uma vez porque as tornava vermelhas, o que se destacava no SSMS, mas os aborrecimentos de digitar a chave de cotação tão rapidamente se tornaram demais para mim e eu recuei nos meus modos preguiçosos. Além disso, não funcionou tão bem para os propósitos pretendidos quando eu tinha seqüências de caracteres na minha consulta. Provavelmente vou continuar, ASjá que é isso o que usamos agora (normalmente eu adiciono uma nova linha antes, AS ColumnNamepara que eles se alinhem aproximadamente), mas concordo que =é muito mais legível em definições de coluna mais longas.
24413 Rachel Rachel
2
@AaronBertrand Meu argumento para colocar as vírgulas primeiro é que fica mais fácil saber onde uma definição de coluna começa, principalmente com definições de colunas com várias linhas.
26413 Rachel
1
@AaronBertrand Eu normalmente não trabalho com código indentado sensatamente>. <#
Rachel