Что означает «foo» в этом запросе SQL Server? - PullRequest
1 голос
/ 01 июня 2010

например ...

SELECT * 
  FROM ( SELECT RANK() OVER (ORDER BY stud_mark DESC) AS ranking,
                stud_id, 
                stud_name, 
                stud_mark 
           FROM tbl_student ) AS foo 
 WHERE ranking = 10

Здесь foo присутствует ... на самом деле, что он делает? ..

Ответы [ 4 ]

6 голосов
/ 01 июня 2010

В этом примере foo является псевдонимом таблицы. Вот как бы вы его использовали:

SELECT foo.* 
  FROM ( SELECT RANK() OVER (ORDER BY ts.stud_mark DESC) AS ranking,
                ts.stud_id, 
                ts.stud_name, 
                ts.stud_mark 
           FROM tbl_student ts) AS foo 
 WHERE foo.ranking = 10

SQL Server (и MySQL в этом отношении) выдаст ошибку, если вы не укажете псевдоним таблицы для производной таблицы (встроенное представление AKA).

4 голосов
/ 01 июня 2010

Это просто псевдоним.

Псевдонимы помогают сократить объем текста, который может потребоваться вводить при написании запросов.

Например, это:

SELECT customer.Name, customer.OpenDate FROM customer

Можно сократить до:

SELECT c.Name, c.OpenDate FROM customer c

В вашем примере это производная таблица (не физическая), которую вы теперь можете фактически сказать:

ВЫБРАТЬ foo.someField вместо SELECT *

3 голосов
/ 01 июня 2010

Было бы лучше спросить: что означает выражение после "AS" в SQL?

Как сказал Джон, это псевдоним. Вы можете использовать его вместо выражения перед AS.

SELECT veryverylongname AS V FROM dummy_table AS D WHERE D.V = 10

Здесь вы видите два псевдонима V для поля и D для таблицы.

Вы также можете использовать его для создания псевдонимов SELECT, как в вашем примере. Затем псевдоним будет представлять таблицу, полученную в результате подзапроса, и будет содержать поля, указанные в подзапросе после вашего SELECT -ключа.

3 голосов
/ 01 июня 2010

Это псевдоним / идентификатор таблицы для производного запроса

Без этого вы получите ошибку, поскольку производная таблица не имеет идентификатора

SELECT * FROM 
 ( SELECT RANK() OVER (ORDER BY stud_mark DESC) AS ranking, stud_id, stud_name, stud_mark FROM tbl_student )
WHERE ranking = 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...