Ответ 1
Нет разницы между обоими утверждениями выше. AS - это просто более явный способ упоминания псевдонима
Вы можете установить псевдонимы таблиц в SQL, набирая идентификатор сразу после имени таблицы.
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
Если вы не знаете, какой синтаксис выбрать, особенно если, кажется, не так много, чтобы отделить выбор, проконсультируйтесь с книгой по эвристике. Насколько я знаю, единственной книгой эвристики для SQL является "Стиль программирования SQL Joe Celko":
Более частое имя корреляции называемый псевдоним, но я буду формальным. В SQL-92 они могут иметь необязательный
AS
, и он должен использоваться чтобы было ясно, что что-то получив новое имя. [Р16]
Таким образом, если вашей команде не нравится соглашение, вы можете обвинить Celko - я знаю, что я делаю;)
ОБНОВЛЕНИЕ 1: IIRC в течение длительного времени, Oracle не поддерживало ключевое слово AS
(предшествующее имя корреляции), которое может объяснить, почему некоторые старые таймеры не используют его обычно.
ОБНОВЛЕНИЕ 2: термин "имя корреляции", хотя используется стандартом SQL, является неуместным. Основная концепция - это переменная диапазона .
ОБНОВЛЕНИЕ 3: Я просто перечитал то, что написал Целько, и он ошибается: таблица не переименовывается! Теперь я думаю:
Имя корреляции чаще всего называется псевдонимом, но я буду формальным. В стандартном SQL они могут иметь необязательное ключевое слово
AS
, но его не следует использовать, потому что это может создать впечатление, что что-то переименовывается, когда оно нет. На самом деле, его следует опустить, чтобы указать, что это переменная диапазона.
Ключевым словом AS
является присвоение имени ALIAS таблице базы данных или столбцу таблицы. В вашем примере оба утверждения правильны, но есть обстоятельства, в которых требуется предложение AS (хотя сам оператор AS
не является обязательным), например
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>
, обычно называемый alias для таблицы.
<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, например, вы получите следующее:
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
(и, возможно, другие) является общим для обеих таблиц, и поскольку синтаксис условия соединения требует ссылки на оба, то "dot qualification" предоставляет значения.
Конечно, лучшим решением было никогда не допускать дублирование имен столбцов в первую очередь! К счастью, если вы используете новый синтаксис NATURAL JOIN
, потребность в переменных диапазона P
и O
исчезает:
SELECT ProductName, ProductRetailPrice, Quantity
FROM Products NATURAL JOIN Orders
WHERE OrderID = 123456