¿Cuál es el propósito de la palabra clave SQL "AS"?

137

Puede establecer alias de tabla en SQL escribiendo el identificador justo después del nombre de la tabla.

SELECT * FROM table t1;

Incluso puede usar la palabra clave ASpara indicar el alias.

SELECT * FROM table AS t1;

¿Cuál es la diferencia entre ellos si hay alguno?

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 la razón de tener una palabra clave separada para establecer alias mientras también funciona sin ella?

viam0Zah
fuente
12
De msdn.microsoft.com/en-us/library/ms179300.aspx La cláusula AS es la sintaxis definida en el estándar ISO para asignar un nombre a una columna de conjunto de resultados. Esta es la sintaxis preferida para usar en SQL Server 2005.
Adriaan Stander
3
También se utiliza para separar la declaración de un procedimiento con su script. CREATE PROC Test @Param1 INT AS SELECT @Param1
Tom 'Blue' Piddock

Respuestas:

134

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

Sachin Shanbhag
fuente
10
En realidad, no hay diferencia en SQL, pero algunas herramientas / bibliotecas dependientes pueden depender de esta pequeña palabra clave. Como ejemplo: JDBC 4.0. Dependiendo del uso de alias con 'AS causa' y sin usted, recibirá un comportamiento diferente; consulte esta respuesta stackoverflow.com/a/4271250/814304 . Me gustaría recomendar SIEMPRE usar la forma completa de semántica para evitar tales problemas.
iMysak
¿Puedo tener alias para más de una columna? como, dos columnas con un solo alias?
Deepak Keynes
@Keynes Sí. Simplemente concatene (||) las columnas y luego dele un alias, por ejemplo, SELECT foo || bar AS foobar.
Rupert Madden-Abbott
Sí @ RupertMadden-Abbott, gracias! pero esperé un poco, estaba en términos de contexto.
Deepak Keynes
El alias en select no se puede usar en la cláusula where sino en from ... como X se puede usar en la cláusula where
Muhammad Umer
38

Todos los que respondieron antes que yo están en lo correcto. Se usa como un nombre de acceso directo 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 usar la palabra clave AS, y es muy recomendable, pero es posible realizar 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, omití 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
XstreamINsanity
fuente
21

Cuando no esté seguro de qué sintaxis elegir, especialmente cuando no parece haber mucho para separar las opciones, consulte un libro sobre heurística. Hasta donde sé, el único libro de heurística para SQL es 'Estilo de programación SQL de Joe Celko':

Un nombre de correlación a menudo se llama alias, pero seré formal. En SQL-92, pueden tener un ASoperador opcional , y debe usarse para dejar en claro que se le está dando un nuevo nombre a algo. [p16]

De esta manera, si a tu equipo no le gusta la convención, puedes culpar a Celko, sé que sí;)


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


ACTUALIZACIÓN 2: el término 'nombre de correlación', aunque es usado por el Estándar SQL, es inapropiado. El concepto subyacente es el de una ' variable de rango '.


ACTUALIZACIÓN 3: Acabo de volver a leer lo que escribió Celko y se equivoca: ¡no se cambia el nombre de la tabla! Ahora pienso:

Un nombre de correlación a menudo se llama alias, pero seré formal. En SQL estándar, pueden tener una ASpalabra clave opcional, pero no se debe usar porque puede dar la impresión de que se está cambiando el nombre de algo cuando no es así. De hecho, se debe omitir para imponer el punto de que es una variable de rango.

un día cuando
fuente
12

La ASpalabra clave es dar un nombre ALIAS a la tabla de la base de datos o a la columna de la tabla. En su ejemplo, ambas afirmaciones son correctas, pero hay circunstancias en las que se necesita la cláusula AS (aunque el ASoperador en sí es opcional), por ejemplo

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

En este caso, la Employeetabla tiene una salarycolumna y solo queremos el doble del salario con un nuevo nombre Double Salary.

Lo siento si mi explicación no es efectiva.


Actualización basada en su comentario, tiene razón, mi declaración anterior no era válida. La única razón por la que puedo pensar es que la AScláusula ha existido durante mucho tiempo en el mundo SQL que se ha incorporado en el RDMS actual para compatibilidad con versiones anteriores.

Buhake Sindi
fuente
3
No, ASno es obligatorio ni necesario incluso en este caso. Tratar SELECT 1 + 1 "result".
viam0Zah
6

El uso es más obvio si no usa 'SELECCIONAR *' (que es un mal hábito del que debería dejar):

SELECT t1.colA, t2.colB, t3.colC FROM alongtablename AS t1, anotherlongtablename AS t2, yetanotherlongtablename AS t3 WHERE t1.colD = t2.colE...
Nicholas Knight
fuente
1
Sé cuál es el propósito de los alias de tabla. Tengo curiosidad, ¿cuál es la razón de tener una palabra clave separada para establecer alias mientras también funciona sin ella?
viam0Zah
4

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

Sangha Preet
fuente
3

En ASeste caso, es una palabra clave opcional definida en ANSI SQL 92 para definir un <<correlation name>, comúnmente conocido como alias para una tabla.

<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 práctica recomendada NO utilizar la ASpalabra clave para los alias de tabla, ya que no es compatible con varias bases de datos de uso común.

Geert Bellekens
fuente
¿Tiene algún ejemplo de dbs que no use la palabra clave 'as'?
D-Jones
3
Creo que Oracle es uno de ellos que no admite la aspalabra clave para los alias de tabla.
Geert Bellekens
1
"La palabra clave AS es opcional. El alias cambia el nombre del elemento de la lista de selección por la duración de la consulta. El alias se puede usar en el order_by_clause pero no en otras cláusulas en la consulta". docs.oracle.com/cd/B28359_01/server.111/b28286/… . También relacionado stackoverflow.com/a/8451257/1359796
HEDMON
2

En los primeros días de SQL, se eligió como la solución al problema de cómo tratar con nombres de columnas duplicados (ver nota más abajo).

Para tomar prestada una consulta de 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 otras) es común a ambas tablas y dado que la sintaxis de la condición de unión requiere referencia a ambas, la 'calificación de punto' proporciona desambiguación.

Por supuesto, ¡la mejor solución fue nunca haber permitido duplicar nombres de columna en primer lugar! Felizmente, si usa la NATURAL JOINsintaxis más nueva , la necesidad de las variables de rango Py Odesaparece:

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

Pero, ¿por qué la ASpalabra clave es opcional? Mi recuerdo de una discusión personal con un miembro del comité estándar de SQL (ya sea Joe Celko o Hugh Darwen) fue que su recuerdo era que, al momento de definir el estándar, el producto de un proveedor (¿Microsoft?) Requería su inclusión y el de otro proveedor. producto (¿Oracle?) requirió su omisión, por lo que el compromiso elegido fue hacerlo opcional. No tengo ninguna cita para esto, ¡o me crees o no!


En los primeros días del modelo relacional, el producto cruzado (o theta-join o equi-join) de las relaciones cuyos encabezados no son disjuntos parecía producir una relación con dos atributos del mismo nombre; La solución de Codd a este problema en su cálculo relacional fue el uso de la calificación de puntos, que luego se emuló en SQL (más tarde se dio cuenta de que la llamada unión natural era primitiva sin pérdida; es decir, la unión natural puede reemplazar todas las uniones y incluso producto cruzado).

Fuente: Sistema de negocios 12, Notas clave para diapositivas de la presentación realizada en el Taller de Implementadores de TTM, Universidad de Northumbria, 2-3 de junio de 2011 por Hugh Darwen

un día cuando
fuente
"Por supuesto, ¡la mejor solución era nunca haber permitido duplicar nombres de columnas en primer lugar!", Por lo tanto, ¿no deberían permitirse company.name y country.name? ¿Y si me uniera a una mesa? "En los primeros días de SQL, se eligió ..." ¿tiene una referencia para esto / esta justificación está documentada en alguna parte?
Bob
@Bob He actualizado mi respuesta con una nota (con cita) del historial de calificación de puntos en SQL, además de mi recuerdo vagamente admitido de por qué la ASpalabra clave es opcional (¡sin cita, obviamente!). Hugh se retiró hace unos años. Creo que Celko podría estar activo todavía: ¿sus recuerdos agregarían peso? La evidencia y el rastro de papel simplemente no existen :(
cuando el
"¿Sus recuerdos agregarían peso?"; No hay necesidad de molestar al señor Celko; el documento BS12 tiene las propias palabras de Darwen sobre las deficiencias de la calificación de puntos: las limitaciones de memoria de los 70 y las uniones repetidas no se me habían ocurrido. Debo admitir que parece muy posible que el alias se haya convertido en SQL por la misma razón.
Bob
0

Si diseña una consulta con el editor de consultas en SQL Server 2012, por ejemplo, obtendrá 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, eliminar el AS no hace ninguna diferencia como en lo 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.

usuario2063329
fuente