您可以在SQL中设置表别名,在表名后面输入标识符。SQL关键字“AS”的用途是什么?
SELECT * FROM table t1;
您甚至可以使用关键字AS
来指示别名。
SELECT * FROM table AS t1;
它们之间有什么区别?
我看到老的DBA人倾向于编写没有AS
的语句,但大多数新教程都使用它。
更新:我知道表和列别名的用途是什么。我很好奇,是什么原因有一个单独的关键字设置别名,而它没有它的工作。
您可以在SQL中设置表别名,在表名后面输入标识符。SQL关键字“AS”的用途是什么?
SELECT * FROM table t1;
您甚至可以使用关键字AS
来指示别名。
SELECT * FROM table AS t1;
它们之间有什么区别?
我看到老的DBA人倾向于编写没有AS
的语句,但大多数新教程都使用它。
更新:我知道表和列别名的用途是什么。我很好奇,是什么原因有一个单独的关键字设置别名,而它没有它的工作。
上述两个陈述之间没有区别。 AS只是提别名更明确的方式
这是一种为实体指定关联名称的正式方式,以便您可以在查询的另一部分轻松解决它。
使用更加明显,如果你不使用“SELECT *”(这是一个坏习惯,你应该得到的):
SELECT t1.colA, t2.colB, t3.colC FROM alongtablename AS t1, anotherlongtablename AS t2, yetanotherlongtablename AS t3 WHERE t1.colD = t2.colE...
我知道表别名的用途是什么。我很好奇,是什么原因有一个单独的关键字设置别名,而它没有它的工作。 – 2010-11-12 12:42:34
AS
关键字是给一个ALIAS名称到您的数据库表或表列。在你的例子中,这两个陈述都是正确的,但是在需要AS子句的情况下(尽管AS
运算符本身是可选的),例如,
SELECT salary * 2 AS "Double salary" FROM employee;
在这种情况下,Employee
表中有一栏salary
,我们只是希望工资用新名称Double Salary
的两倍。
对不起,如果我的解释没有效果。
更新根据您的意见,你说得对,我以前的声明是无效的。我能想到的唯一原因是,AS
子句在SQL世界中已经存在了很长时间,它现在已经被纳入RDMS以实现向后兼容。
不,在这种情况下,不需要或不需要“AS”。尝试'SELECT 1 + 1“结果”'。 – 2010-11-12 12:53:01
在我之前回答的每个人都是正确的。当您有长连接的查询或查询时,可以使用它作为表的别名快捷方式名称。这里有几个例子。
例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
的输出当你不知道选择哪个语法,尤其是当有似乎并没有被太多分开选择,参考启发式方面的书。据我所知,唯一的启发书,SQL是“乔·塞科的SQL编程风格”:
相关名是更经常 称为别名,但我会是正式的。 在SQL-92中,它们可以有一个可选的
AS
运算符,并且应该使用 来说明某些事情被赋予新名称 。 [P16]
这样一来,如果你的球队不喜欢的习惯,你可以责怪Celko - 我知道我这样做;)
更新1:IIRC很长一段时间, Oracle不支持AS
(之前的相关名称)关键字,这可能解释了为什么一些老的定时器不习惯使用它。
更新2:尽管SQL标准使用了术语“相关名称”,但这并不合适。基本概念是'range variable'。
更新3:我只是重新读了Celko写的,他错了:表格没有被重命名!我现在认为:
相关性名称通常被称为别名,但我将是正式的。在标准SQL中,它们可以有一个可选的
AS
关键字,但不应该使用它,因为它可能会给人一种印象,即当某些东西没有被重命名时。事实上,它应该被省略以强制它是一个范围变量。
在这种情况下的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
关键字,因为它不是由一些常用的数据库的支持。
你有没有使用'as'关键字的dbs的例子? – 2016-06-07 18:48:37
我相信Oracle是其中一个不支持表的别名的“as”关键字。 – 2016-06-07 18:58:49
“AS关键字是可选的,别名在查询期间有效地重命名选择列表项。别名可以在order_by_clause中使用,但不在查询中使用其他子句。” http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm。还相关http://stackoverflow.com/a/8451257/1359796 – HEDMON 2016-09-08 07:48:49
如果使用SQL Server 2012中的查询编辑器,例如设计查询,你会得到这样的:
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是多余的,但在许多其他地方它是需要的。
在SQL早期,它被选为解决如何处理重复列名的问题的解决方案。
要从另一个答案借用的查询:
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
柱ProductID
(以及可能其它)是常见的两个表,并且由于连接条件语法要求,参照上述两个,“点资格”提供消歧。
当然,更好的解决方案是永远不会允许重复列名!令人高兴的是,如果你使用新NATURAL JOIN
语法,需要对一系列变量P
和O
消失:
SELECT ProductName, ProductRetailPrice, Quantity
FROM Products NATURAL JOIN Orders
WHERE OrderID = 123456
从http://msdn.microsoft.com/en-us/library/ms179300.aspx *的AS子句是ISO标准中为结果集列指定名称所定义的语法。这是在SQL Server 2005中使用的首选语法。* – 2010-11-12 12:47:57
它也用于将过程的声明与其脚本分开。 'CREATE PROC Test @Param1 INT AS SELECT @Param1' – 2010-11-12 14:20:50