基本语法
select [distinct] [顶部条数| 聚合函数] 字段集合|常量|表达式|函数|* from 表名 [where 查询条件语句集合] [group by 分组字段列表] [having 过滤条件语句集合] 分组查询条件 [order by 排序字段集合 [asc | desc]] [LIMIT [<offset>,] <row count>]
查询全部字段数据(*)
select * from 表名 ;
- 在实际项目中,强烈不建议使用
*
作为返回结果,影响性能。测试时可以使用
- 在实际项目中,强烈不建议使用
局部字段查询
select 字段1,...,字段n from 表名 ;
正则查询
# regexp 关键字 # 正则表达式外必须用 '' 包括 ... where 字段 regexp '正则表达式 ...'
别名( as)
# 为字段指定别名 select 字段 [as] 别名 ... # 为表名指定别名 select *|字段集合 from 表名 as 别名
字符连接(+)
# 注:在MySQL中,+表示的是运算符,不能用于字符串连接 select 1 + 1; # 把字符尝试转换为数值,如果转换成功,则得到对应的数值,如果转换失败,则为0 select 1 + '1' ; select 1 + '你' ; # null + 任何数据 = null select 1 + null ; # 实现字符连接,可以使用concat函数
排序
# 单字段排序,默认为ASC order by 字段 ASC | DESC # 多字段排序 # 注意:在对多个字段进行排序时,排序的第一个字段必须有相同的值,才会对第二个字段进行排序。如果第一个字段数据中所有的值都是唯一的,MySQL 将不再对第二个字段进行排序。 order by 字段1 ASC | DESC,字段2 ASC | DESC
聚合函数(分组函数)
- sum() : 求和
- avg() : 平均值
- max() : 最大值
- min() : 最小值
count() : 记录数
- count(*):统计所有字段
- count(字段):不统计NULL值
注意:
- 也叫分组函数,一般用于分组查询
- 以上五个分组函数都忽略null值,除了count(*);
- sum和avg一般用于处理数值型,max、min、count可以处理任何数据类型;
- 如果count字段,则字段值为NULL的情况,将忽略统计
分组查询
分组查询的操作步骤:
- 先分组 -- 分组的字段
- 后统计(聚合函数)
select 字段,聚合函数 from 表名 group by 字段 【WITH ROLLUP】 having 条件
select后面跟着的字段必须满足两个条件
- 必须跟分组的字段 || 使用了聚合函数的字段
having 条件
- where是分组前条件,having是分组后条件。
分页查询
select * from 表名 limit (当前页-1) * 每页记录数,每页记录数
去重
# distinct关键字给筛选掉重复的字段值 select distinct 字段 from 表名
case then 语句的使用
CREATE TABLE test_user ( id int primary key auto_increment , name varchar(50) not null , gender tinyint default 1 , country_code smallint ) engine=InnoDb default charset=utf8; insert into test_user(name,gender,country_code) values ('清风',1,100) ; insert into test_user(name,gender,country_code) values ('玄武',2,100) ; insert into test_user(name,gender,country_code) values ('Kobe',1,110) ; insert into test_user(name,gender,country_code) values ('John Snow',1,200) ; select id,name,gender, ( case gender when 1 then '男' when 2 then '女' else '未知' end ) 性别, country_code from test_user;