使用表别名进行选择

SELECT e.Fname, e.LName 
FROM Employees e

Employees 表在表名后直接给出别名 e。这有助于消除多个表具有相同字段名称的情况下的歧义,并且你需要具体说明要从哪个表返回数据。

SELECT e.Fname, e.LName, m.Fname AS ManagerFirstName 
FROM Employees e 
    JOIN Managers m ON e.ManagerId = m.Id

请注意,一旦定义了别名,就不能再使用规范表名。即

SELECT e.Fname, Employees.LName, m.Fname AS ManagerFirstName 
FROM Employees e 
JOIN Managers m ON e.ManagerId = m.Id

会抛出错误。

值得注意的是,表别名 - 更正式的’范围变量’ - 被引入到 SQL 语言中以解决由 INNER JOIN 引起的重复列问题。1992 年的 SQL 标准通过引入 NATURAL JOIN(在 mySQL,PostgreSQL 和 Oracle 中实现但在 SQL Server 中尚未实现)纠正了此早期的设计缺陷,其结果从未具有重复的列名。上面的例子很有趣,因为这些表连接在具有不同名称的列(IdManagerId)上,但不应该在具有相同名称的列(LNameFName)上连接,需要重命名要执行的列加入之前

SELECT Fname, LName, ManagerFirstName 
FROM Employees
     NATURAL JOIN
     ( SELECT Id AS ManagerId, Fname AS ManagerFirstName
       FROM Managers ) m;

请注意,虽然必须为 dervied 表声明别名/范围变量(否则 SQL 将引发错误),但在查询中实际使用它是没有意义的。