2010-03-16 14 views
11

me encontré con una instrucción SQL que utiliza AS a tablas de alias, como esto:¿Por qué usarías "AS" cuando se alias una tabla SQL?

SELECT all, my, stuff 
FROM someTableName AS a 
INNER JOIN someOtherTableName AS b 
    ON a.id = b.id 

lo que estoy acostumbrado a ver es:

SELECT all, my, stuff 
FROM someTableName a 
INNER JOIN someOtherTableName b 
    ON a.id = b.id 

Estoy asumiendo que no hay diferencia y es solo azúcar sintáctico, pero ¿cuál de estos es más prevalente/extendido? ¿Hay alguna razón para preferir uno sobre el otro?

Editado aclarar:

Agradezco todas las respuestas y todos los puntos señalados, pero la pregunta era no por qué o por qué no utilizar alias de tabla. La pregunta era puramente sobre usar la palabra clave "AS" para el alias de tabla o dejarlo fuera.

Respuesta

20

Es azúcar sintáctica y tarda un poco más en escribir, pero a algunas personas les resulta más legible y legible. La razón por la que lo uso es que cuando se lee una consulta grande, es más fácil seleccionar los alias buscando el AS.

Otra razón, a veces el nombre completo de la tabla es largo y engorroso de escribir. Aliasing a algo más corto a veces puede hacer las cosas más fáciles cuando no tienes características de lujo como autocompletar, o para cuando te sientes perezoso. ;)

... Y como algunos otros han señalado antes que yo, puede ser útil al hacer self-joins.

+0

Definitivamente es más legible si su base de datos lo admite. Buen azúcar sintáctico :) –

+0

Gracias por la respuesta. Sin embargo, solo quería señalar: el segundo párrafo es más una razón para alias que una razón por la cual o por qué no para usar "AS". – froadie

+0

@froadie: ¡Sí, creo que me dejé llevar por la "fiebre de aliasing"! Creo que tienes razón, el primer párrafo responde la pregunta más directamente. – FrustratedWithFormsDesigner

3

No todas las bases de datos admiten la declaración AS hasta donde yo sé. (Oracle?) Pero por alguna razón parece más legible.

Edit: Oracle no admite la palabra clave 'AS' aquí;

ORA-00933: SQL command not properly ended 
+3

Si no recuerdo mal, Oracle no soporta 'AS' de aliasing mesa, pero el 'AS' palabra clave es obligatoria para los alias de campo. –

+0

Acabo de probarlo aquí para estar seguro, pero de hecho no funciona para el aliasing de tablas. (ver edición) – Rhapsody

+0

@Will Marcouiller - interesante. Esa es la sintaxis que he visto más a menudo (AS para campos pero no tablas), y asumí que era necesaria; tal vez por eso. – froadie

5

Generalmente se prefiere. Considere lo que sucede si está usando la antigua 'notación de coma' para las combinaciones, y pierde una coma.

En lugar de:

select * 
from Orders, Customers; 

Se termina con:

select * 
from Orders Customers; --Customers is now the alias for Orders. 

Y mientras esto no se fija mediante la introducción de 'como', se puede decir con mayor facilidad si se pretende (ya que puede que realmente haya deseado aliar a los pedidos como clientes, dependiendo de qué más le estaba haciendo durante mi consulta).

+0

Debo mencionar que soy bastante perezoso sobre el uso de 'como', por ejemplo, esta consulta que acabo de escribir en http: // ask.sqlservercentral.com/questions/4908/permutations-in-t-sql –

0

Probablemente al utilizar AS se puede ver rápidamente cuáles son las tablas que se usan como Alias.

3

En primer lugar, alias con "a" en realidad se considera una cosa mala (oficialmente lo prohibimos en nuestro estándar de codificación). El motivo es que en una consulta larga y complicada de varias tablas, las personas pierden de vista qué alias representa qué tabla.

Guardar 2 segundos al escribir, especialmente en esta era de IDEs intellisenseish, es un poco idiota cuando se compara con la legibilidad/mantenibilidad.

El principal uso legítimo de aliasing es hacer autocombinaciones

+0

Querías decir "aliasing with" como "en realidad es" –

+0

+1 para autocombinaciones. – FrustratedWithFormsDesigner

+2

@Ashish Gupta - No lo creo, parece que él/ella quiso decir que usar "a" como alias no es muy comprensible. Estoy de acuerdo, pero si lo alias como algo más corto * y * aún reconocible, creo que hay un lugar para ello. A menudo he visto alias cuando los nombres de las tablas son molestamente largos. – froadie

1

alias de campo son para facilitar la lectura de la salida. Los alias de tabla son para la legibilidad de la estructura de consulta. Especialmente cuando se trata de nombres de tablas largas e incluso referencias de bases de datos cruzadas.

Si tiene referencias de tabla duplicadas en su consulta, siempre debe usar alias de tabla para distinguir una tabla de la otra. Por ejemplo, un padre-hijo se unen podría ser algo como esto:

SELECT parent.Name AS ParentName, 
child.Name AS ChildName 
FROM MyTable AS parent 
INNER JOIN MyTable as child 
ON parent.ID = child.ParentID 
0

Si tiene una instrucción SQL enorme con varias combinaciones, alias que sea más fácil de leer/entender donde las columnas son procedentes de

una de nuestras aplicaciones no pueden manejar guiones en los nombres de columna (no me pregunte por qué), por lo que los alias son un método perfecto para convertir COLUMN-NAME-COLUMN_NAME

0

por lo que cuando AS debe ser explícita especificada, que depende de la sintaxis compatible por el particul motor ar y preferencia personal (o incluso política).

En SQL Server (que es todo lo que trato), AS es opcional en el caso de después de un nombre de relación en FROM o JOIN. En tales casos, omito la palabra clave debido a mi preferencia y que me parece que no "disminuye la legibilidad" cuando se utiliza con un formulario de unión orientado a línea consistente.

Sin embargo, cuando el uso de consultas derivadas, SQL Server requiere la palabra clave AS y por lo que diligentemente se incluyen en este tipo de casos.

Una vez más, en las cláusulas de salida debido a la preferencia , incluyo AS. Creo que mi elección de la palabra clave aquí se debe al hecho de que, a diferencia de mi formateo de unión, a menudo ocurre que múltiples identificadores aparecen en la misma línea.

tanto, para mí en SQL Server:

SELECT a.all AS my, a.stuff -- AS (preference) 
FROM someTableName a   -- no AS (preference) 
INNER JOIN (
    SELECT .. 
    ) AS b     -- AS (required) 
    ON a.id = b.id 
+0

[SQL Server no requiere 'AS' cuando se usan consultas derivadas.] (Http://www.sqlfiddle.com/#!6/d41d8/17859) – hvd

Cuestiones relacionadas