我发现了一条 SQL 语句,其效果如下:
SELECT * FROM Users x
我的问题是:什么是x
?我以前从未见过这种情况。
谢谢。
x
是表的别名Users
。
通过为表指定别名(也称为相关名称或范围变量)可以提高 SELECT 语句的可读性。可以使用或不使用 AS 关键字来分配表别名:
SELECT * FROM Users x
SELECT * FROM Users AS x
这是一个别名。该AS
关键字是可选的,已被省略,但与以下内容相同:
SELECT * FROM Users AS x
这意味着您可以(在 SQL 的某些实现中,SQL Server 是其中之一,必须)x
在查询的其余部分中使用来引用Users
此处指定的表。例如:
SELECT x.MyColumn
FROM Users x
WHERE x.AnotherColumn = 42
别名有三种一般用例:
可读性。对于较长的表名或名称会被多次使用时,可以提高可读性。例如,想象以下没有别名的情况:
SELECT x.SomeColumn, x.SomeOtherColumn, x.AThirdColumn
FROM [my crAzy Table Name with spaces in it] x
WHERE x.AnotherColumn = 42
消歧。常用于自连接,注意两次使用同一张表。您必须使用别名来区分Users
表的两个实例:
SELECT x.SomeColumn, COUNT(y.SomeColumn)
FROM Users x
INNER JOIN Users y ON x.SomeOtherColumn < y.SomeOtherColumn
GROUP BY x.SomeColumn
FROM 或 JOIN 子句(也称为派生表)中的子查询必须具有名称。这是通过指定别名来完成的:
SELECT x.SomeColumn
FROM
(
SELECT SomeColumn
FROM Users
) x
它只是用户的别名,可以在查询中使用。
想象 :
您想从 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
如果表名很长,则使用第二个版本,查询可能会较不实用。