SQL表和列别名
在本教程中,您将了解SQL别名,包括表和列别名,以使查询更短,更易理解。
1. SQL别名简介
SQL别名用于在执行查询期间为表或列分配临时名称。 有两种类型的别名:表别名和列别名。
几乎所有关系数据库管理系统都支持列别名和表别名。
1.1. 列别名
当我们设计表时,经常将列名称保持简短或另起新名称,例如,销售订单号为:so_no
,发票号码为:inv_no
。在使用SELECT
语句从表中查询数据返回输出时不具有描述性。
要在查询中为列指定新名称,请使用列别名。 列别名只是执行查询期间列的临时名称。更多教程请访问http://www.manongzj.com
请参阅以下查询:
SELECT
inv_no AS invoice_no,
amount,
due_date AS '截止日期',
cust_no '客户编号'
FROM
invoices;
invoice_no
是inv_no
列的别名'Due date'
是due_date
列的列别名。 因为别名包含空格,所以必须使用单引号('
)或双引号("
)来包围别名。'Customer no'
是cust_no
列的别名。注意这里没有使用AS
关键字。AS
关键字是可选的,因此可以省略它。
我们经常对选择列表中的表达式使用列别名。 例如,以下查询使用headcount
作为返回雇员数量的表达式的列别名:
SELECT
count(employee_id) headcount
FROM
employees;
执行上面示例代码,得到以下结果 -
mysql> SELECT
count(employee_id) headcount
FROM
employees;
+-----------+
| headcount |
+-----------+
| 40 |
+-----------+
1 row in set
可以在SELECT
子句之后评估的任何子句中使用列别名,例如HAVING子句。 请参阅以下示例:
SELECT
department_id,
count(employee_id) headcount
FROM
employees
GROUP BY
department_id
HAVING
headcount >= 5;
执行上面示例代码,得到以下结果 -
在HAVING
子句中,我们不是引用表达式count(employee_id)
,而是引用列别名headcount
。
1.2. 表别名
在SELECT
语句中临时为表分配一个不同的名称。这个表的新名称称为表别名。 表别名也称为相关名称。
请注意,分配别名实际上并不重命名表。 它只是在执行查询时为表提供另一个名称。
在实践中,我们保持表别名简短且易于理解。 例如,e
代表员工,d
代表部门,j
代表职位,l
代表位置。
那么为什么必须使用表别名呢?
第一个原因:使用表别名的是节省输入冗长名称的时间并使查询更容易理解。 请参阅以下查询:
SELECT
d.department_name
FROM
departments AS d
d
是departments
表的表别名。 AS
关键字是可选的,因此可以省略它。
当departments
表具有别名d
时,您可以使用别名d
来引用该表。
例如,d.department_name
引用departments
表的department_name
字段。 如果不使用表别名,则必须使用departments.department_name
来引用更长的department_name
字段。
第二个原因:使用表别名,希望在单个查询中多次引用同一个表。例如经常在内联接,左联接和自联接中找到此类查询。
以下查询使用inner join
子句从employees
和departments
表中选择数据。
SELECT
employee_id,
first_name,
last_name,
department_name
FROM
employees
INNER JOIN departments ON department_id = department_id
ORDER BY
first_name;
执行上面查询语句后,数据库系统将发出错误:
Column 'department_id' in on clause is ambiguous
要避免这个错误,需要使用表名限定列,如下所示:
SELECT
employee_id,
first_name,
last_name,
employees.department_id,
department_name
FROM
employees
INNER JOIN departments ON departments.department_id = employees.department_id
ORDER BY
first_name;
要使查询更短,可以使用表别名,例如,e
表示employees
表,d
表示departments
表,如下面的查询:
SELECT
employee_id,
first_name,
last_name,
e.department_id,
department_name
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
ORDER BY
first_name;
以下查询使用self-join
将employee
表自联接。
SELECT
e.first_name AS employee,
m.first_name AS manager
FROM
employees e
LEFT JOIN employees m ON m.employee_id = e.manager_id
ORDER BY
manager;
因为employees
表在查询中出现两次,所以需要使用两个表别名:e
和m
; e
代表员工,而m
代表经理。
在本教程中,您学习了如何使用SQL别名(包括列别名和表别名)来使查询更短,更易理解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?