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是多余的,但在许多其他地方是必要的。