que - ¿Cuál es el propósito de la palabra clave SQL "AS"?
sql pdf (9)
Cuando no está seguro de qué sintaxis elegir, especialmente cuando parece que no hay mucho para separar las opciones, consulte un libro sobre heurística. Por lo que yo sé, el único libro de heurística para SQL es ''Estilo de programación SQL de Joe Celko'':
Un nombre de correlación se suele llamar un alias, pero yo seré formal. En SQL-92, pueden tener un operador
AS
opcional, y se debe usar para dejar en claro que a algo se le está dando un nuevo nombre. [p16]
De esta forma, si a su equipo no le gusta la convención, puede culpar a Celko, sé que lo hago;)
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, es inapropiado. El concepto subyacente es el de una '' variable de rango ''.
ACTUALIZACIÓN 3: Acabo de volver a leer lo que Celko escribió y él está equivocado: ¡la mesa no se renombra! Ahora pienso:
Un nombre de correlación se suele llamar un alias, pero yo 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.
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 AS
para indicar el alias.
SELECT * FROM table AS t1;
¿Cuál es la diferencia entre ellos si hay alguno?
Veo que las personas antiguas 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?
El AS
en este 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 buena práctica NO utilizar la palabra clave AS
para alias de tabla, ya que no es compatible con una serie de bases de datos de uso común.
El uso es más obvio si no usas ''SELECT *'' (que es un mal hábito del que debes salir):
SELECT t1.colA, t2.colB, t3.colC FROM alongtablename AS t1, anotherlongtablename AS t2, yetanotherlongtablename AS t3 WHERE t1.colD = t2.colE...
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 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 era nunca haber permitido nombres de columnas duplicados en primer lugar! Afortunadamente, si usa la sintaxis NATURAL JOIN
más nueva, la necesidad de las variables de rango P
y O
desaparece:
SELECT ProductName, ProductRetailPrice, Quantity
FROM Products NATURAL JOIN Orders
WHERE OrderID = 123456
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.
La palabra clave AS
es para dar un nombre ALIAS a su tabla de base de datos o columna de tabla. En su ejemplo, ambos enunciados son correctos, pero existen circunstancias en las que se necesita una cláusula AS (aunque el operador AS
mismo es opcional), por ejemplo
SELECT salary * 2 AS "Double salary" FROM employee;
En este caso, la tabla Employee
tiene una columna de salary
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 fue 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 de SQL que se ha incorporado en RDMS hoy en día para compatibilidad con versiones anteriores.
No hay diferencia entre las dos declaraciones anteriores. AS es solo una manera más explícita de mencionar el alias
Si diseña una consulta utilizando 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 se muestra a continuación:
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.
Todos los que respondieron antes que yo son correctos. 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 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