Skip to content

SQL Aliases

SQL 别名用于在查询中为表或列指定一个临时的、替代的名称。这可以使您的 SQL 语句更短、更具可读性、更容易理解,尤其是在涉及连接(JOIN)或函数(function)的复杂查询中。

别名是为表或列在特定 SQL 查询持续期间赋予的临时名称。它们不会改变数据库模式(database schema)中的实际名称。

使用别名的好处:

  • **可读性:**通过缩短长或隐晦的名称,使复杂查询更容易阅读。
  • **JOIN 中的清晰度:**在表自连接(self-join)或多个表具有同名列时至关重要。
  • **计算列:**为从表达式或函数派生的列提供有意义的名称。
  • **简洁性:**减少所需的输入量。

SELECT column_name AS alias_name FROM table_name;

或者,在某些数据库系统(database system)中,列别名的 AS 关键词(keyword)是可选的,尽管为了清晰起见,最好包含它:

SELECT column_name alias_name FROM table_name;

SELECT column_name(s) FROM table_name AS alias_name;

同样,表的 AS 关键词通常是可选的,但推荐使用:

SELECT column_name(s) FROM table_name alias_name;

我们将使用概念性的“Customers”(客户)表和“Orders”(订单)表作为示例,类似于 Northwind 数据库中的那些表。

“Customers”表的示例数据:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK

“Orders”表的示例数据:

OrderIDCustomerIDEmployeeIDOrderDateShipperID
103545881996-11-143
10355461996-11-151
103568661996-11-182

以下 SQL 语句在输出中将 CustomerName 重命名为 Customer,将 ContactName 重命名为 Contact Person。如果别名包含空格,则必须用双引号或方括号括起来(语法可能因 RDBMS 而异)。

SELECT CustomerName AS Customer, ContactName AS "Contact Person"
FROM Customers;

此查询将生成名为 ‘Customer’ 和 ‘Contact Person’ 的列。

为连接(拼接)列创建别名:

SELECT CustomerName, CONCAT(Address, ', ', City, ', ', PostalCode, ', ', Country) AS FullAddress
FROM Customers;

注意:CONCAT() 函数是标准的字符串连接函数。有些数据库(如 SQL Server)使用 + 进行字符串连接,而另一些(如 Oracle 或 PostgreSQL)使用 ||。

表别名在 JOIN 操作中特别有用。以下 SQL 语句选择客户名为 ‘Around the Horn’ 的所有订单。我们使用别名 c 代表“Customers”,使用 o 代表“Orders”来缩短查询:

SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c
INNER JOIN Orders AS o ON c.CustomerID = o.CustomerID
WHERE c.CustomerName = 'Around the Horn';

不使用别名时,查询将更加冗长:

SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE Customers.CustomerName = 'Around the Horn';
  • 在使用 JOIN 子句查询多个表时。
  • 在使用函数或表达式创建派生列时。
  • 当列名过长、无信息或包含在 SQL 中使用起来 awkward 的字符时。
  • 在执行自连接(将表连接到自身)时。
  • 当 JOIN 中的多个表共享同名列时(例如,ID、Name),别名对于消除歧义至关重要。