前一章节介绍了 SELECT 语句的基本结构,本章将介绍 SELECT 为特定列设置别名、去除重复值等技巧。
在前面已经介绍了选择特定列,语法如下:
-- 查询用户的姓名和邮箱
mysql> SELECT username, email FROM users;
+-------------+----------------------+
| username | email |
+-------------+----------------------+
| zhang_san | zhangsan@example.com |
| li_si | lisi@example.com |
| wang_wu | wangwu@example.com |
| zhao_liu | zhaoliu@example.com |
| qian_qi | qianqi@example.com |
| sun_ba | sunba@example.com |
| zhou_jiu | zhoujiu@example.com |
| wu_shi | wushi@example.com |
| zheng_shiyi | zheng11@example.com |
| chen_shier | chen12@example.com |
+-------------+----------------------+
10 rows in set (0.00 sec)
-- 查询用户ID和注册时间
mysql> SELECT user_id, created_at FROM users;
+---------+---------------------+
| user_id | created_at |
+---------+---------------------+
| 1 | 2026-07-29 13:55:25 |
| 2 | 2026-07-29 13:55:25 |
| 3 | 2026-07-29 13:55:25 |
| 4 | 2026-07-29 13:55:25 |
| 5 | 2026-07-29 13:55:25 |
| 6 | 2026-07-29 13:55:25 |
| 7 | 2026-07-29 13:55:25 |
| 8 | 2026-07-29 13:55:25 |
| 9 | 2026-07-29 13:55:25 |
| 10 | 2026-07-29 13:55:25 |
+---------+---------------------+
10 rows in set (0.00 sec)注意了,尽量避免使用 SELECT *,特别是在表有很多列或者查询数据量大的情况下。指定列名可以减少网络传输,提高查询效率。
不知道是否还记得前面的“SELECT 'Hello MySQL'”语句,查询后,列名为“Hello MySQL”,如下:
mysql> SELECT 'Hello MySQL';
+-------------+
| Hello MySQL |
+-------------+
| Hello MySQL |
+-------------+
1 row in set (0.00 sec)可是,我们并不想要这个列名,那么就使用 as 指定别名,语法如下:
-- 给列起别名
SELECT
username AS 用户名,
email AS 邮箱地址,
created_at AS 注册时间
FROM users;
-- AS可以省略
SELECT
username 用户名,
email 邮箱地址
FROM users;
-- 别名中有空格或特殊字符时用引号
SELECT
username AS 'User Name',
email AS 'Email Address'
FROM users;注意,别名在查询结果中会作为列标题显示,在应用程序中可以通过别名获取字段值。
示例,为“SELECT 'Hello MySQL'”指定别名,例如:
mysql> SELECT 'Hello MySQL' as 'value';
+-------------+
| value |
+-------------+
| Hello MySQL |
+-------------+
1 row in set (0.00 sec)上面语句指定别名为 value。
在 select 语句中使用 distinct 关键字可以去除查询数据中重复的数据行,语法如下:
-- 查询所有不同的性别
SELECT DISTINCT gender FROM users;
-- 查询不同的城市和性别组合
SELECT DISTINCT city, gender FROM users;
-- 统计有多少个不同的城市
SELECT COUNT(DISTINCT city) FROM users;注意,DISTINCT 会对指定的列组合去重,所有列的值都相同才认为是重复。例如:
-- 没有去重
mysql> select created_at from users;
+---------------------+
| created_at |
+---------------------+
| 2026-07-29 13:55:25 |
| 2026-07-29 13:55:25 |
| 2026-07-29 13:55:25 |
| 2026-07-29 13:55:25 |
| 2026-07-29 13:55:25 |
| 2026-07-29 13:55:25 |
| 2026-07-29 13:55:25 |
| 2026-07-29 13:55:25 |
| 2026-07-29 13:55:25 |
| 2026-07-29 13:55:25 |
+---------------------+
10 rows in set (0.00 sec)
-- 去重后
mysql> select distinct created_at from users;
+---------------------+
| created_at |
+---------------------+
| 2026-07-29 13:55:25 |
+---------------------+
1 row in set (0.00 sec)提醒,数据库学习,看懂 ≠ 会写,眼睛一看明白,上手就报错,是绝大多数人的常态。所以看完后,还需要自己动手操作,后续将介绍 WEHRE 子句的用法。