Quel est le but du mot-clé SQL «AS»?

Vous pouvez définir des alias de table dans SQL en tapant l’identificateur juste après le nom de la table.

SELECT * FROM table t1; 

Vous pouvez même utiliser le mot-clé AS pour indiquer l’alias.

 SELECT * FROM table AS t1; 

Quelle est la différence entre eux, le cas échéant?

Je vois que les anciens utilisateurs de DBA ont tendance à écrire des instructions sans AS , mais la plupart des nouveaux tutoriels l’utilisent.

Mise à jour: Je sais quel est le but des alias de tables et de colonnes. Je suis curieux, quelle est la raison d’avoir un mot-clé distinct pour définir des alias alors qu’il fonctionne également.

Il n’y a pas de différence entre les deux déclarations ci-dessus. AS est juste un moyen plus explicite de mentionner l’alias

Tous ceux qui ont répondu avant moi sont corrects. Vous l’utilisez comme nom de raccourci d’alias pour une table lorsque vous avez de longues requêtes ou des requêtes ayant des jointures. Voici quelques exemples.

Exemple 1

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

Exemple 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 

Exemple 3 Il est recommandé d’utiliser le mot-clé AS, et très recommandé, mais il est possible d’exécuter la même requête sans un mot (et je le fais souvent).

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

Comme vous pouvez le constater, j’ai omis le mot-clé AS dans le dernier exemple. Et il peut être utilisé comme un alias.

Exemple 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 

Sortie de l’exemple 4

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

Si vous ne savez pas quelle syntaxe choisir, surtout quand il ne semble pas y avoir beaucoup de choses à séparer, consultez un livre sur les heuristiques. Pour autant que je sache, le seul livre heuristique pour SQL est «Style de programmation SQL de Joe Celko»:

Un nom de corrélation est plus souvent appelé un alias, mais je serai formel. Dans SQL-92, ils peuvent avoir un opérateur AS optionnel, et il doit être utilisé pour indiquer clairement que quelque chose reçoit un nouveau nom. [p16]

De cette façon, si votre équipe n’aime pas la convention, vous pouvez blâmer Celko – je sais que oui;)


MISE À JOUR 1: IIRC pour une longue période, Oracle ne supportait pas le mot-clé AS (précédent nom de corrélation), ce qui peut expliquer pourquoi certains anciens utilisateurs ne l’utilisent pas habituellement.


UPDATE 2: le terme «nom de corrélation», bien qu’utilisé par le standard SQL, est inapproprié. Le concept sous-jacent est celui d’une « variable de gamme ».


MISE À JOUR 3: Je viens de relire ce que Celko a écrit et il a tort: ​​la table n’est pas renommée! Je pense maintenant:

Un nom de corrélation est plus souvent appelé un alias, mais je serai formel. Dans SQL standard, ils peuvent avoir un mot-clé AS facultatif, mais il ne doit pas être utilisé car cela peut donner l’impression que quelque chose est renommé quand ce n’est pas le cas. En fait, il devrait être omis pour faire valoir qu’il s’agit d’une variable de plage.

Le mot-clé AS doit donner un nom ALIAS à votre table de firebase database ou à la colonne de la table. Dans votre exemple, les deux instructions sont correctes mais il existe des circonstances où la clause AS est nécessaire (bien que l’opérateur AS lui-même soit facultatif), par exemple

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

Dans ce cas, la table Employee contient une colonne de salary et nous voulons simplement le double du salaire avec un nouveau nom Double Salary .

Désolé si mon explication n’est pas efficace.


Mise à jour basée sur votre commentaire, vous avez raison, ma déclaration précédente était invalide. La seule raison pour laquelle je peux penser est que la clause AS existe depuis longtemps dans le monde SQL et qu’elle a été intégrée au système RDMS d’aujourd’hui pour assurer la compatibilité descendante.

L’utilisation est plus évidente si vous n’utilisez pas «SELECT *» (ce qui est une mauvaise habitude dont vous devriez vous débarrasser):

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

C’est une manière formelle de spécifier un nom de corrélation pour une entité afin que vous puissiez l’adresser facilement dans une autre partie de la requête.

L’ AS dans ce cas est un mot clé facultatif défini dans ANSI SQL 92 pour définir un < , communément appelé alias pour une table.

  ::= 
[ [ AS ] [ ] ] | [ AS ] [ ] | ::=
::= ::= [ { }... ] Syntax Rules 1) A immediately contained in a
TR is exposed by TR. A
immediately contained in a
TR is exposed by TR if and only if TR does not specify a .

Il semble préférable de ne PAS utiliser le mot-clé AS pour les alias de table, car il n’est pas pris en charge par un certain nombre de bases de données couramment utilisées.

Si vous concevez une requête à l’aide de l’éditeur de requête dans SQL Server 2012, par exemple, vous obtiendrez ceci:

  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') 

Cependant, le retrait de l’AS ne fait aucune différence comme dans les cas suivants:

  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') 

Dans ce cas, l’utilisation de l’AS est superflue mais dans de nombreux autres endroits, elle est nécessaire.

Au début du SQL, il a été choisi comme solution au problème de la gestion des noms de colonnes en double.

Pour emprunter une requête à partir d’une autre réponse:

 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 colonne ProductID (et éventuellement d’autres) est commune aux deux tables et, comme la syntaxe de la condition de jointure fait référence aux deux, la «qualification de point» fournit la désambiguïsation.

Bien sûr, la meilleure solution était de ne jamais autoriser les noms de colonnes en double! Heureusement, si vous utilisez la syntaxe NATURAL JOIN plus récente, le besoin de variables de plage P et O disparaît:

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