¿Hay alguna diferencia entre poner un alias de columna al principio o al final de la definición de columna?

12

Siempre he visto y escrito mis alias de columna como

SELECT 1 as ColumnName

pero hoy encontré una consulta que usaba

SELECT ColumnName = 1

¿Hay alguna diferencia en cómo se ejecutan estas dos consultas? ¿O hay un estándar entre los DBA sobre cuál usar?

Personalmente, creo que la segunda sería más fácil de leer / mantener para definiciones de columna más largas (buen ejemplo aquí de este artículo ), sin embargo, nunca he visto la segunda sintaxis utilizada antes de hoy, así que me pregunto si hay alguna razón por la que no debería ser usándolo

Rachel
fuente
2
Tenga en cuenta que la forma de asignación de alias de comentarios no es portátil, por lo que, aunque hace que las cosas sean bastante legibles cuando está haciendo MUCHO trabajo de columna derivada, puede ser molesto tener que convertirlo más tarde a otro DBMS.
Cade Roux
@Cade Celko hace ese argumento sobre ciertas cosas todo el tiempo. Si tengo que convertir una base de código de SQL Server a Oracle o PG o MySQL, la composición de alias será la menor de mis preocupaciones. Dado que, a diferencia de Celko, no tengo interés en evitar todas las características propietarias en caso de que alguna vez traslademos toda nuestra arquitectura a un RDBMS diferente. Me pregunto con qué frecuencia eso sucede realmente fuera del aula ...
Aaron Bertrand
@AaronBertrand Estoy de acuerdo con la conversión en masa. Convertí un montón de cosas a Teradata y este es el menor de los problemas. Lo que me sigue sucediendo con más frecuencia es que importaré datos completos de la tabla en bruto en mi propio SQL Server y haré vistas o una consulta sobre él o lo que sea que haga para analizarlo, y luego escribiré una consulta o proceso para la fuente el dialecto del sistema se llamará desde SSIS o lo que sea para obtener exactamente los datos que quiero a través del cable. En esos casos, estoy escribiendo conscientemente SQL de estilo ANSI muy genérico. Y luego todavía tengo que cambiar las cosas como las funciones de fecha.
Cade Roux

Respuestas:

17

No hay diferencia en la funcionalidad subyacente de los dos tipos de alias ( asopuesto a =). Todo se reduce exactamente a lo que mencionó: legibilidad y facilidad de mantenimiento.

En mi opinión, el primero ( <Expression> as <Alias>) es mucho más legible ya que se explica por sí mismo. Cuando lo haya hecho SELECT ColumnName = 1, creo que sería bastante fácil confundir eso como establecer una variable en esas largas noches cansadas. Puede confundir eso como SELECT @ColumnName = 1y eso sería una funcionalidad completamente diferente. Por lo tanto, para evitar cualquier posibilidad de la consulta "doble mirada", o peor aún ... error en la comprensión / codificación, voy con el SELECT 1 as ColumnName100% del tiempo.

Preferencia personal, pero la consistencia (para usted y dentro de su equipo) es el rey . Sea lo que sea más fácil, ve y hazlo todo el tiempo. No hay nada más frustrante que cambiar de una persona a otra para solucionar problemas / revisar / mantener el código.

La tercera forma no mencionada es usar <Expression> <Alias>. En otras palabras, su segunda forma sin la aspalabra clave. Creo que esto es tan malo como el =símbolo. ¿Carece de legibilidad en beneficio de qué? No escribir tres caracteres adicionales ( asy un espacio). No vale la pena.

Para fines de exageración, eche un vistazo a una consulta como esta:

use AdventureWorks2012;
go

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

No es un código que me gustaría revisar.

Thomas Stringer
fuente
55
siempre me molesta ver el último, donde excluyen la palabra clave "como". No es obligatorio, pero es difícil de leer cuando se mira un montón de código.
10

Personalmente, me resulta alias = expressionmás fácil de leer y comprender. La razón es que cuando estoy solucionando un problema de una SELECTdeclaración que tiene expresiones largas, probablemente quiera encontrar la expresión a través del nombre de la columna, no al revés. Rápido, encuentre la expresión que la aplicación ve como alias2:

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

Esa es mi preferencia. El tuyo puede ser diferente. No existe una verdadera ventaja al usar uno u otro, excepto por razones subjetivas / gustativas. Lo importante es que elijas una forma de hacerlo y lo hagas de manera consistente (y a menos que arrojes una moneda, podrás defender tu elección cuando te enfrentes a alguien a quien le gusta la otra). Pero si escribe código para un DBA tan quisquilloso como yo, prepárese para que se reescriba. :-)

He blogueado sobre esto .

Una cosa que me hace sentir aún más fuerte es el uso de comillas simples alrededor de los nombres de alias, p. Ej.

column AS 'alias'
'alias' = column

Una forma está en desuso, pero ambas son muy difíciles de leer, y muchos novatos confunden el alias como un literal de cadena, ya que así es como se ve. Por las mismas razones, detesto absolutamente el uso de comillas dobles ( "alias"). Si necesita escapar de su alias porque es una palabra reservada o está mal elegida o formateada, úsela [square brackets].

Aaron Bertrand
fuente
2
Completamente de acuerdo en el aspecto de las citas. En cuanto a la expresión larga, lo que personalmente hago es usar retornos de carro y tabulación de nueva línea y luego poner el as <Alias>en la última línea de la definición de columna. Pero definitivamente de acuerdo, es tan personal como cómo te gusta tu café.
Thomas Stringer
@ThomasStringer ve que prefiero que el carro devuelva la expresión. Si una línea comienza con AS Aliaseso, ASno es muy útil cuando estoy escaneando verticalmente un nombre de tabla en particular. Apuesto a que no estaríamos de acuerdo sobre dónde poner las comas también. :-)
Aaron Bertrand
Intenté usar comillas simples alrededor de los alias de mi columna una vez porque los hizo rojos, lo que sobresalía en SSMS, pero las molestias de escribir la clave de comillas se volvieron demasiado rápidas para mí y volví a mis formas flojas. Además, no funcionó tan bien para los fines previstos cuando tenía cadenas en mi consulta. Probablemente me quede con ASeso, ya que eso es lo que usamos en este momento (generalmente agrego una nueva línea antes AS ColumnNamepara que se alineen aproximadamente), pero estoy de acuerdo en que =es mucho más legible en definiciones de columna más largas.
Rachel
2
@AaronBertrand Mi argumento para poner las comas primero es que hace que sea más fácil saber dónde comienza una definición de columna, particularmente con definiciones de columna de varias líneas.
Rachel
1
@AaronBertrand Usualmente no trabajo con código sensiblemente sangrado>. <
Rachel