Какова цель ключевого слова SQL "AS"?

Вы можете установить псевдонимы таблиц в SQL, набирая идентификатор сразу после имени таблицы.

SELECT * FROM table t1;

Вы можете даже использовать ключевое слово AS, чтобы указать псевдоним.

SELECT * FROM table AS t1;

Какая разница между ними, если таковая имеется?

Я вижу, что старые пользователи DBA склонны писать утверждения без AS, но большинство новых руководств используют его.

Обновление: я знаю, какова цель псевдонимов таблиц и столбцов. Мне любопытно, почему у вас есть отдельное ключевое слово для установки псевдонимов, пока оно работает без него.

Ответ 1

Нет разницы между обоими утверждениями выше. AS - это просто более явный способ упоминания псевдонима

Ответ 2

Все, кто отвечал предо мной, верны. Вы используете его как имя ярлыка псевдонима для таблицы, когда у вас есть длинные запросы или запросы, имеющие соединения. Вот несколько примеров.

Пример 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

Ответ 3

Если вы не знаете, какой синтаксис выбрать, особенно если, кажется, не так много, чтобы отделить выбор, проконсультируйтесь с книгой по эвристике. Насколько я знаю, единственной книгой эвристики для SQL является "Стиль программирования SQL Joe Celko":

Более частое имя корреляции называемый псевдоним, но я буду формальным. В SQL-92 они могут иметь необязательный AS, и он должен использоваться чтобы было ясно, что что-то получив новое имя. [Р16]

Таким образом, если вашей команде не нравится соглашение, вы можете обвинить Celko - я знаю, что я делаю;)


ОБНОВЛЕНИЕ 1: IIRC в течение длительного времени, Oracle не поддерживало ключевое слово AS (предшествующее имя корреляции), которое может объяснить, почему некоторые старые таймеры не используют его обычно.


ОБНОВЛЕНИЕ 2: термин "имя корреляции", хотя используется стандартом SQL, является неуместным. Основная концепция - это переменная диапазона .


ОБНОВЛЕНИЕ 3: Я просто перечитал то, что написал Целько, и он ошибается: таблица не переименовывается! Теперь я думаю:

Имя корреляции чаще всего называется псевдонимом, но я буду формальным. В стандартном SQL они могут иметь необязательное ключевое слово AS, но его не следует использовать, потому что это может создать впечатление, что что-то переименовывается, когда оно нет. На самом деле, его следует опустить, чтобы указать, что это переменная диапазона.

Ответ 4

Ключевым словом AS является присвоение имени ALIAS таблице базы данных или столбцу таблицы. В вашем примере оба утверждения правильны, но есть обстоятельства, в которых требуется предложение AS (хотя сам оператор AS не является обязательным), например

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

В этом случае таблица Employee имеет столбец salary, и мы просто хотим удвоить зарплату с новым именем Double Salary.

Извините, если мои объяснения не эффективны.


Обновить на основе вашего комментария, вы правы, мой предыдущий оператор был недействителен. Единственная причина, по которой я могу думать, это то, что предложение AS существует в течение долгого времени в мире SQL, которое было включено в настоящее время RDMS для обратной совместимости.

Ответ 5

Использование более очевидно, если вы не используете "SELECT *" (это плохая привычка, из которой вы должны выйти):

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

Ответ 6

Это формальный способ указания имени корреляции для объекта, чтобы вы могли легко обращаться с ним в другой части запроса.

Ответ 7

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 для псевдонимов таблицы, поскольку оно не поддерживается рядом часто используемых баз данных.

Ответ 8

Если вы создаете запрос с помощью редактора запросов в 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 является излишним, но во многих других местах оно необходимо.

Ответ 9

В первые дни 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