Что означает "foo" в этом запросе SQL Server?
Например,...
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 ответа
Это просто псевдоним.
Псевдонимы помогают сократить объем текста, который может потребоваться вводить при написании запросов.
Например это:
SELECT customer.Name, customer.OpenDate FROM customer
Можно сократить до:
SELECT c.Name, c.OpenDate FROM customer c
В вашем примере это производная таблица (не физическая), которую вы теперь можете сказать:
ВЫБЕРИТЕ foo.someField вместо SELECT *
В этом примере 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).
Это псевдоним / идентификатор таблицы для производного запроса
Без этого вы получите ошибку, потому что производная таблица не имеет идентификатора
SELECT * FROM
( SELECT RANK() OVER (ORDER BY stud_mark DESC) AS ranking, stud_id, stud_name, stud_mark FROM tbl_student )
WHERE ranking = 10
Было бы лучше спросить: что означает выражение после "AS
значит в SQL?
Как сказал Джон, это псевдоним. Вы можете использовать его вместо выражения перед AS.
SELECT veryverylongname AS V FROM dummy_table AS D WHERE D.V = 10
Здесь вы можете увидеть два псевдонима V для поля и D для таблицы.
Вы также можете использовать его для завершения псевдонима SELECT
Заявления, как в вашем примере. Затем псевдоним будет представлять таблицу, полученную в результате подзапроса, и будет содержать поля, указанные в подзапросе после вашего запроса. SELECT
-ключевое слово.