您可以在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