例如......
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
存在......实际上它是做什么的?...
答案 0 :(得分:6)
在此示例中,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
如果没有为派生表指定表别名(AKA内联视图),SQL Server(以及MySQL)就会抛出错误。
答案 1 :(得分:4)
这只是一个别名。
别名可帮助您减少撰写查询时可能需要输入的文字数量。
例如:
SELECT customer.Name, customer.OpenDate FROM customer
可缩短为:
SELECT c.Name, c.OpenDate FROM customer c
在您的示例中,它是一个派生表(不是物理表),现在您可以实际说:
SELECT foo.someField而不是SELECT *
答案 2 :(得分:3)
它是派生查询的表别名/标识符
没有它,您将收到错误,因为派生表没有标识符
SELECT * FROM
( SELECT RANK() OVER (ORDER BY stud_mark DESC) AS ranking, stud_id, stud_name, stud_mark FROM tbl_student )
WHERE ranking = 10
答案 3 :(得分:3)
最好问:“AS
”之后的表达式在SQL中意味着什么?
Jon说,这是别名。您可以使用它代替AS之前的表达式。
SELECT veryverylongname AS V FROM dummy_table AS D WHERE D.V = 10
在这里你可以看到两个别名V代表字段,D代表表格。
您也可以使用它来填写完整的SELECT
- 语句,如您的示例所示。然后,别名将代表子查询生成的表格,并在SELECT
- 关键字后面的子查询中指定字段。