这个SQL Server查询中“foo”是什么意思?

时间:2010-06-01 15:51:39

标签: sql sql-server tsql table-alias

例如......

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 个答案:

答案 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 - 关键字后面的子查询中指定字段。

相关问题