在mysql数据库的日常使用中,查询列数据是开发和维护过程中高频出现的操作,通过合理的查询语句可以快速获取表中需要的字段信息,避免返回冗余数据提升查询效率。
基础列查询语法
mysql查询列数据的核心是使用SELECT语句,最基础的语法结构是SELECT 列名 FROM 表名,如果需要查询表中的所有列,可以使用通配符*代替列名。
假设我们有一个用户表user_info,表结构如下:
| 列名 | 类型 | 说明 |
|---|---|---|
| id | int | 用户ID |
| username | varchar(50) | 用户名 |
| age | int | 年龄 |
| varchar(100) | 邮箱 |
如果需要查询所有用户的用户名和年龄,对应的查询语句如下:
-- 查询user_info表的username和age列 SELECT username, age FROM user_info;
如果需要查询表中所有列的数据,可以使用以下语句:
-- 查询user_info表所有列 SELECT * FROM user_info;
带条件的列查询
实际场景中往往不需要查询所有行的列数据,而是需要筛选符合特定条件的行,这时候可以在SELECT语句后添加WHERE子句来指定筛选条件。
比如需要查询年龄大于18岁的用户的用户名和邮箱,语句如下:
-- 查询年龄大于18岁的用户的用户名和邮箱 SELECT username, email FROM user_info WHERE age > 18;
如果需要查询用户名为张三的用户的所有列数据,语句如下:
-- 查询用户名为张三的用户所有信息 SELECT * FROM user_info WHERE username = '张三';
查询列数据去重
如果查询的列中存在重复值,需要获取不重复的结果,可以使用DISTINCT关键字,该关键字会对查询结果中的指定列进行去重处理。
比如需要查询所有不重复的用户年龄,语句如下:
-- 查询user_info表中不重复的年龄 SELECT DISTINCT age FROM user_info;
如果需要同时对多列去重,DISTINCT会对指定的多列组合进行去重,比如查询不重复的用户名和年龄组合:
-- 查询不重复的用户名和年龄组合 SELECT DISTINCT username, age FROM user_info;
给查询列设置别名
有时候查询出来的列名不符合展示需求,可以使用AS关键字给列设置别名,别名只会改变查询结果的列名显示,不会影响原表结构。
比如需要将username列显示为用户名,age列显示为年龄,语句如下:
-- 给查询列设置别名 SELECT username AS 用户名, age AS 年龄 FROM user_info;
如果不需要使用AS关键字,也可以直接在列名后加空格加别名,效果一致:
-- 省略AS关键字的别名设置 SELECT username 用户名, age 年龄 FROM user_info;
常见注意事项
- 列名之间需要用英文逗号分隔,最后一个列名后不需要加逗号,否则会报语法错误
- 如果列名或者表名是mysql的保留关键字,需要用反引号`将名称包裹起来,比如查询
order表的列数据:SELECT * FROM `order` WHERE子句中的字符串条件需要用单引号包裹,数值类型条件不需要加引号- 通配符
*虽然方便,但在生产环境中不建议使用,因为会返回所有列,增加数据传输开销,建议明确指定需要的列名