2

我发现了一条 SQL 语句,其效果如下:

SELECT * FROM Users x

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

谢谢。

4

3 回答 3

5

x是表的别名Users

使用表别名

通过为表指定别名(也称为相关名称或范围变量)可以提高 SELECT 语句的可读性。可以使用或不使用 AS 关键字来分配表别名:

SELECT * FROM Users x

SELECT * FROM Users AS x
于 2012-10-09T19:58:33.847 回答
4

这是一个别名。该AS关键字是可选的,已被省略,但与以下内容相同:

SELECT * FROM Users AS x

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

SELECT x.MyColumn
FROM Users x
WHERE x.AnotherColumn = 42

别名有三种一般用例:

  1. 可读性。对于较长的表名或名称会被多次使用时,可以提高可读性。例如,想象以下没有别名的情况:

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

    SELECT x.SomeColumn, COUNT(y.SomeColumn)
    FROM Users x
    INNER JOIN Users y ON x.SomeOtherColumn < y.SomeOtherColumn
    GROUP BY x.SomeColumn
    
  3. FROM 或 JOIN 子句(也称为派生表)中的子查询必须具有名称。这是通过指定别名来完成的:

    SELECT x.SomeColumn
    FROM
    (
        SELECT SomeColumn
        FROM Users
    ) x
    
于 2012-10-09T19:58:49.697 回答
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

如果表名很长,则使用第二个版本,查询可能会较不实用。

于 2012-10-09T19:58:45.593 回答