2010-11-12 24 views
89

Puede establecer alias de tabla en SQL escribiendo el identificador justo después del nombre de la tabla.¿Cuál es el propósito de la palabra clave SQL "AS"?

SELECT * FROM table t1; 

Incluso puede utilizar la palabra clave AS para indicar el alias.

SELECT * FROM table AS t1; 

¿Cuál es la diferencia entre ellos, en su caso?

Veo que las personas mayores de DBA tienden a escribir declaraciones sin AS, pero la mayoría de los nuevos tutoriales lo usan.

Actualización: Sé cuál es el propósito de los alias de tabla y columna. Tengo curiosidad, ¿cuál es el motivo de tener una palabra clave separada para establecer alias mientras funciona sin él también?

+10

De http://msdn.microsoft.com/en-us/library/ms179300.aspx * La La cláusula AS es la sintaxis definida en el estándar ISO para asignar un nombre a una columna del conjunto de resultados. Esta es la sintaxis preferida para usar en SQL Server 2005. * –

+3

También se usa para separar la declaración de un procedimiento con su script. 'CREATE PROC Test @ Param1 INT AS SELECT @ Param1' –

Respuesta

81

No hay diferencia entre las dos afirmaciones anteriores. AS es sólo una forma más explícita de mencionar el alias

+33

Y explícito siempre es bueno: P – annakata

+4

En realidad, no hay diferencia en SQL, pero algunas herramientas/bibliotecas dependientes pueden depender de esta palabra clave pequeña. Como ejemplo: JDBC 4.0. Dependiendo de usar alias w/'AS cause' y w/o usted recibirá un comportamiento diferente - vea esta respuesta http://stackoverflow.com/a/4271250/814304. Me gustaría recomendar SIEMPRE utilizar la forma completa de semántica para evitar estos problemas. – iMysak

+0

¿Puedo tener alias para más de una columna? como, dos columnas con alias individuales? – Keynes

3

Es una forma formal de especificar un nombre de correlación para una entidad para que pueda abordarla fácilmente en otra parte de la consulta.

4

El uso es más obvio si no se utiliza 'SELECT *' (que es un mal hábito que debe salir de la):

SELECT t1.colA, t2.colB, t3.colC FROM alongtablename AS t1, anotherlongtablename AS t2, yetanotherlongtablename AS t3 WHERE t1.colD = t2.colE... 
+1

Sé cuál es el propósito de los alias de tabla. Tengo curiosidad, ¿cuál es el motivo de tener una palabra clave separada para establecer alias mientras funciona sin él también? –

10

La palabra clave AS es para dar un nombre ALIAS a la tabla de la base de datos o a la columna de la tabla. En su ejemplo, ambos enunciados son correctos, pero hay circunstancias en las que se necesita una cláusula AS (aunque el operador AS es opcional), p.

SELECT salary * 2 AS "Double salary" FROM employee; 

En este caso, la tabla tiene una columna Employeesalary y que sólo quieren que el doble del salario con un nuevo nombre Double Salary.

Lo siento si mi explicación no es efectiva.


actualización basado en su comentario, tienes razón, mi afirmación anterior no es válida. La única razón por la que puedo pensar es que la cláusula AS ha existido por mucho tiempo en el mundo SQL que se ha incorporado en RDMS hoy en día para compatibilidad con versiones anteriores.

+2

No, 'AS 'no es obligatorio ni necesario, incluso en este caso. Intenta con el resultado 'SELECT 1 + 1 '' ''. –

27

Todos los que respondieron antes que yo están en lo cierto. Lo utiliza como un nombre de atajo de alias para una tabla cuando tiene consultas largas o consultas que tienen uniones. Aquí hay un par de ejemplos.

Ejemplo 1

SELECT P.ProductName, 
     P.ProductGroup, 
     P.ProductRetailPrice 
FROM Products AS P 

Ejemplo 2

SELECT P.ProductName, 
     P.ProductRetailPrice, 
     O.Quantity 
FROM Products AS P 
LEFT OUTER JOIN Orders AS O ON O.ProductID = P.ProductID 
WHERE O.OrderID = 123456 

Ejemplo 3 Es una buena práctica utilizar la palabra clave AS, y muy recomendable, pero es posible realice la misma consulta sin una (y lo hago a menudo).

SELECT P.ProductName, 
     P.ProductRetailPrice, 
     O.Quantity 
FROM Products P 
LEFT OUTER JOIN Orders O ON O.ProductID = P.ProductID 
WHERE O.OrderID = 123456 

Como puede ver, dejé fuera la palabra clave AS en el último ejemplo. Y se puede usar como un alias.

Ejemplo 4

SELECT P.ProductName AS "Product", 
     P.ProductRetailPrice AS "Retail Price", 
     O.Quantity AS "Quantity Ordered" 
FROM Products P 
LEFT OUTER JOIN Orders O ON O.ProductID = P.ProductID 
WHERE O.OrderID = 123456 

salida del Ejemplo 4

Product    Retail Price  Quantity Ordered 
Blue Raspberry Gum $10 pk/$50 Case 2 Cases 
Twizzler   $5 pk/$25 Case 10 Cases 
19

Cuando no está seguro de qué sintaxis para elegir, especialmente cuando no parece haber mucho que separe las elecciones, consulte un libro sobre heurística. Por lo que yo sé, el libro sólo heurística para SQL es 'de Joe Celko SQL Programación Style':

Un nombre de correlación es más a menudo llamados un alias, pero voy a ser formal. En SQL-92, pueden tener un operador opcional AS, y se debe usar para dejar en claro que algo tiene con un nuevo nombre. [P16]

De esta manera, si su equipo no le gusta la convención, se puede culpar Celko - Yo sé que hacer;)


ACTUALIZACIÓN 1: IIRC durante mucho tiempo, Oracle no admitió la palabra clave AS (nombre de correlación anterior), lo que puede explicar por qué algunos veteranos no la usan habitualmente.


ACTUALIZACIÓN 2: el término 'nombre de correlación', aunque utilizado por el estándar SQL, no es apropiado. El concepto subyacente es el de 'range variable'.


Actualización 3: acabo de volver a leer lo que escribió Celko y que está equivocado: la tabla no se está cambiando el nombre! Ahora pienso:

Un nombre de correlación es más a menudo llamado alias, pero seré formal. En SQL estándar, pueden tener una palabra clave AS opcional, pero no debe usarse porque puede dar la impresión de que algo se renombra cuando no lo es. De hecho, se debe omitir para hacer cumplir el punto de que es una variable de rango.

1

El AS en este caso es una palabra clave opcional se define en ANSI SQL 92 para definir un <<correlation name>, conocido comúnmente como alias para una mesa.

<table reference> ::= 
      <table name> [ [ AS ] <correlation name> 
       [ <left paren> <derived column list> <right paren> ] ] 
      | <derived table> [ AS ] <correlation name> 
       [ <left paren> <derived column list> <right paren> ] 
      | <joined table> 

    <derived table> ::= <table subquery> 

    <derived column list> ::= <column name list> 

    <column name list> ::= 
      <column name> [ { <comma> <column name> }... ] 


    Syntax Rules 

    1) A <correlation name> immediately contained in a <table refer- 
     ence> TR is exposed by TR. A <table name> immediately contained 
     in a <table reference> TR is exposed by TR if and only if TR 
     does not specify a <correlation name>. 

Parece una buena práctica de no utilizar la palabra clave AS para los alias de mesa, ya que no es compatible con una serie de bases de datos de uso común.

+0

¿Tiene algún ejemplo de dbs que no utilice la palabra clave 'como'? –

+0

Creo que Oracle es uno de ellos que no admite 'as'keyword para alias de tabla. –

+0

"La palabra clave AS es opcional. El alias cambia el nombre de la lista de selección por la duración de la consulta. El alias se puede usar en el orden_por_clase pero no en otras cláusulas en la consulta". http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm. También relacionado http://stackoverflow.com/a/8451257/1359796 – HEDMON

0

Si el diseño de consulta usando el editor de búsquedas en SQL Server 2012, por ejemplo, se podrían obtener esto:

SELECT  e.EmployeeID, s.CompanyName, o.ShipName 
FROM   Employees AS e INNER JOIN 
         Orders AS o ON e.EmployeeID = o.EmployeeID INNER JOIN 
         Shippers AS s ON o.ShipVia = s.ShipperID 
WHERE  (s.CompanyName = 'Federal Shipping') 

Sin embargo retirar el AS no hace ninguna diferencia como en el siguiente:

SELECT  e.EmployeeID, s.CompanyName, o.ShipName 
FROM   Employees e INNER JOIN 
         Orders o ON e.EmployeeID = o.EmployeeID INNER JOIN 
         Shippers s ON o.ShipVia = s.ShipperID 
WHERE  (s.CompanyName = 'Federal Shipping') 

En este caso, el uso de AS es superfluo, pero en muchos otros lugares es necesario.

0

En los primeros días de SQL, se eligió como la solución al problema de cómo tratar con nombres de columna duplicados.

para tomar prestada una consulta desde otra respuesta:

SELECT P.ProductName, 
     P.ProductRetailPrice, 
     O.Quantity 
    FROM Products AS P 
     INNER JOIN Orders AS O ON O.ProductID = P.ProductID 
WHERE O.OrderID = 123456 

La columna ProductID (y posiblemente otros) es común a ambas tablas y puesto que la sintaxis condición de combinación requiere referencia a ambas, la 'cualificación punto' ofrece desambiguación .

¡Por supuesto, la mejor solución era nunca haber permitido nombres de columnas duplicados en primer lugar! Felizmente, si se utiliza la más reciente NATURAL JOIN sintaxis, la necesidad de que las variables de rango PO y desaparece:

SELECT ProductName, ProductRetailPrice, Quantity 
    FROM Products NATURAL JOIN Orders 
WHERE OrderID = 123456 
Cuestiones relacionadas