SELECT中表名后面的SQL Server额外文本

时间:2012-10-09 19:57:58

标签: sql sql-server-2008

我发现了一个SQL语句:

SELECT * FROM Users x

我的问题是:x是什么?我以前从未见过这个。

感谢。

3 个答案:

答案 0 :(得分:5)

x是表Users的别名。

Using Table Aliases

  

通过给出一个可以改善SELECT语句的可读性   表别名,也称为相关名称或范围变量。一个   可以使用或不使用AS关键字分配表别名:

SELECT * FROM Users x

SELECT * FROM Users AS x

答案 1 :(得分:3)

这是别名。 AS关键字是可选的,但已被省略,但它与:

相同
SELECT * FROM Users AS x

这意味着您可以(在SQL的某些实现中,SQL Server是其中之一,必须)在查询的其余部分中使用x来引用表{{ 1}}在这里指定。例如:

Users

别名有三个常见用例:

  1. 可读性。对于长表名称或名称将多次使用,它可以提高可读性。例如,假设以下没有别名:

    SELECT x.MyColumn
    FROM Users x
    WHERE x.AnotherColumn = 42
    
  2. 消歧。通常用于自连接,请注意使用相同的表两次。您必须使用别名来区分SELECT x.SomeColumn, x.SomeOtherColumn, x.AThirdColumn FROM [my crAzy Table Name with spaces in it] x WHERE x.AnotherColumn = 42 表的两个实例:

    Users
  3. FROM或JOIN子句中的子查询(也称为派生表)必须具有名称。这是通过指定别名来完成的:

    SELECT x.SomeColumn, COUNT(y.SomeColumn)
    FROM Users x
    INNER JOIN Users y ON x.SomeOtherColumn < y.SomeOtherColumn
    GROUP BY x.SomeColumn
    

答案 2 :(得分:1)

它只是用户的别名,可以在查询中使用。

想象一下:

您想要从2个表中检索数据,并且

中都包含Id列

如果你想要检索这些ID,你必须在列名前加上前缀以避免混淆。

使用别名:

select t1.Id, t2.Id
from mytableWithAReallyComplicatedName t1
inner join mySecondtableWithAReallyComplicatedName t2 on t1.Id = t2.Id

没有别名

select mytableWithAReallyComplicatedName.Id, mySecondtableWithAReallyComplicatedName.Id
from mytableWithAReallyComplicatedName 
inner join mySecondtableWithAReallyComplicatedName on mytableWithAReallyComplicatedName.Id = mySecondtableWithAReallyComplicatedName .Id

表名很长,使用第二个版本,查询可能很难实际阅读。