SQL关键字“AS”的用途是什么?

您可以在SQL中设置表别名,在表名后面input标识符。

SELECT * FROM table t1; 

甚至可以使用关键字AS来表示别名。

 SELECT * FROM table AS t1; 

他们之间有什么区别?

我发现老的DBA人倾向于在没有AS情况下编写语句,但大多数新的教程使用它。

更新:我知道表和列别名的目的是什么。 我很好奇,有一个单独的关键字设置别名,而没有它的工作原因是什么。

上述两个陈述之间没有区别。 AS只是提到别名的更明确的方式

在我之前回答的每个人都是正确的。 当您有长连接的查询或查询时,使用它作为表的别名快捷方式名称。 这里有几个例子。

例1

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

例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 

示例3使用AS关键字是一个很好的习惯,而且非常推荐,但是可以在没有一个的情况下执行相同的查询(我经常这样做)。

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

正如你所看到的,我在最后一个例子中忽略了AS关键字。 它可以用作别名。

例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 

例4的输出

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

当你不确定要select哪种语法时,尤其是当看起来没有太多分离select时,请参阅一本关于启发式的书。 据我所知,SQL的唯一启发式手册是“Joe Celko的SQL编程风格”:

相关名称通常被称为别名,但我将是正式的。 在SQL-92中,他们可以有一个可选的AS操作符,它应该用来清楚地说明某个东西正在被赋予一个新的名字。 [P16]

这样,如果你的团队不喜欢这个惯例,你可以责怪Celko–我知道我是这么做的;)


更新1:IIRC很长一段时间,Oracle不支持AS (之前的相关名)关键字,这也许可以解释为什么一些老的定时器不习惯使用它。


更新2:尽pipeSQL标准使用了“相关名称”这个术语,但这是不合适的。 其基本概念是“ 范围variables ”。


更新3:我只是重新阅读什么Celko写道,他是错的:表没有被重命名! 我现在想:

相关名称通常被称为别名,但我将是正式的。 在标准SQL中,它们可以有一个可选的AS关键字,但不应该使用它,因为它可能会给人一种印象,那就是某些东西没有被重命名。 实际上,应该省略它来强制它是一个范围variables。

AS关键字是为您的数据库表或表列指定一个ALIAS名称。 在你的例子中,两个语句都是正确的,但是有AS语句需要的情况(尽pipeAS操作符本身是可选的),例如

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

在这种情况下, Employee表有一个salary栏,我们只是想用新名称Double Salary

对不起,如果我的解释是无效的。


根据你的评论更新 ,你是对的,我以前的发言是无效的。 我能想到的唯一原因是AS子句在SQL世界中已经存在了很长时间,它已经被合并到当今用于向后兼容的RDMS中。

如果你不使用'SELECT *'(这是一个坏习惯,你应该离开),这个用法更加明显:

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

这是一种为实体指定关联名称的正式方式,以便您可以在查询的另一部分轻松解决它。

在这种情况下, AS是ANSI SQL 92中定义的一个可选关键字,用于定义一个<<correlation name> (通常称为表的别名)

 <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>. 

对于表别名来说,最好不要使用AS关键字,因为它不被许多常用的数据库所支持。

如果您使用SQL Server 2012中的查询编辑器devise查询,例如,您将得到:

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

但是,删除AS没有任何区别,如下所示:

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

在这种情况下,使用AS是多余的,但在许多其他地方是必要的。