SQL Aliases
SQL 别名
Section titled “SQL 别名”SQL 别名用于在查询中为表或列指定一个临时的、替代的名称。这可以使您的 SQL 语句更短、更具可读性、更容易理解,尤其是在涉及连接(JOIN)或函数(function)的复杂查询中。
理解 SQL 别名
Section titled “理解 SQL 别名”别名是为表或列在特定 SQL 查询持续期间赋予的临时名称。它们不会改变数据库模式(database schema)中的实际名称。
使用别名的好处:
- **可读性:**通过缩短长或隐晦的名称,使复杂查询更容易阅读。
- **JOIN 中的清晰度:**在表自连接(self-join)或多个表具有同名列时至关重要。
- **计算列:**为从表达式或函数派生的列提供有意义的名称。
- **简洁性:**减少所需的输入量。
列的 SQL 别名语法
Section titled “列的 SQL 别名语法”SELECT column_name AS alias_name FROM table_name;
或者,在某些数据库系统(database system)中,列别名的 AS 关键词(keyword)是可选的,尽管为了清晰起见,最好包含它:
SELECT column_name alias_name FROM table_name;
表的 SQL 别名语法
Section titled “表的 SQL 别名语法”SELECT column_name(s) FROM table_name AS alias_name;
同样,表的 AS 关键词通常是可选的,但推荐使用:
SELECT column_name(s) FROM table_name alias_name;
我们将使用概念性的“Customers”(客户)表和“Orders”(订单)表作为示例,类似于 Northwind 数据库中的那些表。
“Customers”表的示例数据:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
“Orders”表的示例数据:
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
|---|---|---|---|---|
| 10354 | 58 | 8 | 1996-11-14 | 3 |
| 10355 | 4 | 6 | 1996-11-15 | 1 |
| 10356 | 86 | 6 | 1996-11-18 | 2 |
以下 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 FullAddressFROM Customers;注意:CONCAT() 函数是标准的字符串连接函数。有些数据库(如 SQL Server)使用 + 进行字符串连接,而另一些(如 Oracle 或 PostgreSQL)使用 ||。
表别名在 JOIN 操作中特别有用。以下 SQL 语句选择客户名为 ‘Around the Horn’ 的所有订单。我们使用别名 c 代表“Customers”,使用 o 代表“Orders”来缩短查询:
SELECT o.OrderID, o.OrderDate, c.CustomerNameFROM Customers AS cINNER JOIN Orders AS o ON c.CustomerID = o.CustomerIDWHERE c.CustomerName = 'Around the Horn';不使用别名时,查询将更加冗长:
SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerNameFROM CustomersINNER JOIN Orders ON Customers.CustomerID = Orders.CustomerIDWHERE Customers.CustomerName = 'Around the Horn';什么情况下别名最有用?
Section titled “什么情况下别名最有用?”- 在使用
JOIN子句查询多个表时。 - 在使用函数或表达式创建派生列时。
- 当列名过长、无信息或包含在 SQL 中使用起来 awkward 的字符时。
- 在执行自连接(将表连接到自身)时。
- 当 JOIN 中的多个表共享同名列时(例如,
ID、Name),别名对于消除歧义至关重要。