MySQL - 别名
MySQL - 使用别名
Section titled “MySQL - 使用别名”在 SQL 中,别名(Alias)是查询中赋予表或列的临时替代名称。使用别名可以使列名更具可读性,并简化查询,尤其是在处理 JOIN 操作或复杂表达式时。
MySQL 别名
Section titled “MySQL 别名”别名使用 AS 关键字来分配。虽然在 MySQL 中 AS 关键字在技术上是可选的,但使用它是强烈推荐的最佳实践,因为它能使查询的意图更加清晰。
为列名使用别名
Section titled “为列名使用别名”列别名经常用于为结果集中的列提供更具描述性的名称,或者命名从表达式或聚合函数派生的列。
SELECT column_name AS alias_nameFROM table_name;
-- 或使用表达式SELECT expression AS alias_nameFROM table_name;让我们使用前面示例中的 customers 表。
SELECT * FROM customers LIMIT 3;| id | 姓名 | 年龄 | 地址 | 薪资 |
|---|---|---|---|---|
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | Kaushik | 23 | Kota | 2000.00 |
示例 1:简单的列别名
Section titled “示例 1:简单的列别名”在此查询中,我们重命名了输出中的 id 和 name 列。
SELECT id AS customer_id, name AS customer_nameFROM customers;结果集将包含 customer_id 和 customer_name 作为表头。
示例 2:聚合函数别名
Section titled “示例 2:聚合函数别名”一个非常常见的用例是为聚合函数(如 COUNT()、SUM() 或 AVG())的结果命名。
SELECT COUNT(id) AS total_customers, AVG(salary) AS average_salaryFROM customers;这会产生一个清晰、可读的结果:
| total_customers | average_salary |
|---|---|
| 7 | 5000.00 |
示例 3:连接列的别名
Section titled “示例 3:连接列的别名”您可以从现有数据创建新的虚拟列并为其指定别名。
SELECT id, CONCAT(name, ' from ', address) AS location_infoFROM customers;| id | 位置信息 |
|---|---|
| 1 | Ramesh from Ahmedabad |
| 2 | Khilan from Delhi |
| 等等 | … |
为表名使用别名
Section titled “为表名使用别名”表别名对于编写简洁易读的 JOIN 查询至关重要。在执行自连接(Self-Join)时,它们是强制性的。
语法(现代 JOIN 语法)
Section titled “语法(现代 JOIN 语法)”现代的、显式的 JOIN 语法比旧的基于逗号的语法更受青睐,因为它能清楚地将连接条件与筛选条件(WHERE 子句)分开。
SELECT t1.column, t2.columnFROM table1 AS t1JOIN table2 AS t2 ON t1.common_column = t2.common_column;示例:连接 customers 和 orders 表
Section titled “示例:连接 customers 和 orders 表”让我们创建一个 orders 表,并将其与 customers 表连接,以找出谁订购了什么。
CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, amount DECIMAL(10, 2));
INSERT INTO orders VALUES(101, 3, '2023-10-08', 3000.00),(102, 2, '2023-11-20', 1560.00),(103, 3, '2023-10-08', 1500.00),(104, 4, '2023-05-20', 2060.00);现在,让我们使用简短清晰的别名(c 代表 customers,o 代表 orders)来连接它们。
SELECT c.name, c.address, o.order_date, o.amountFROM customers AS cJOIN orders AS o ON c.id = o.customer_idORDER BY c.name;这将产生以下结果:
| 姓名 | 地址 | order_date | amount |
|---|---|---|---|
| Chaitali | Mumbai | 2023-05-20 | 2060.00 |
| Kaushik | Kota | 2023-10-08 | 3000.00 |
| Kaushik | Kota | 2023-10-08 | 1500.00 |
| Khilan | Delhi | 2023-11-20 | 1560.00 |
使用自连接(Self-Join)的别名
Section titled “使用自连接(Self-Join)的别名”自连接是当您将一个表与自身连接时。在这种情况下,表别名不仅有帮助,而且是必需的,以区分同一表的两个实例。
示例:查找员工及其经理
Section titled “示例:查找员工及其经理”一个经典的例子是 employees 表,其中 manager_id 列引用同一表中另一个员工的 id。我们可以使用自连接来列出每个员工及其经理的姓名。
CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(100), manager_id INT);
INSERT INTO employees VALUES(1, 'Alice', NULL), -- CEO 没有经理(2, 'Bob', 1),(3, 'Charlie', 1),(4, 'David', 2);在这里,我们将 employees 表与自身连接,将一个实例别名为 e(代表员工),另一个别名为 m(代表经理)。使用 LEFT JOIN 是为了包含没有经理的 CEO。
SELECT e.name AS employee_name, m.name AS manager_nameFROM employees AS eLEFT JOIN employees AS m ON e.manager_id = m.id;上述查询的输出如下:
| employee_name | manager_name |
|---|---|
| Alice | |
| Bob | Alice |
| Charlie | Alice |
| David | Bob |