SQL语句limit用法与SQL去重查询
SQL语句limit使用方法
select * from Customer LIMIT 10;--检索前10行数据,显示1-10条数据;
select * from Customer LIMIT 0,10;--检索从第1行开始,输出累计10条记录
select * from Customer limit 5,10;--检索从第6行开始,输出累计10条记录
- Limit的作用是获取一表前几条或中间某几行数据,注意只在MySQL中起作用
- Limit用法:limit 起始下标m,长度n ,m是记录开始的index,默认从0开始,表示第一条记录,n是指从第m+1条开始,取n条。
SQL语句limit的特点
//错误写法
select *
from `tab`
limit (3-1)*5, 5;
- order by ... [asc|desc]用于对查询结果排序,asc:升序,desc:降序,asc|desc可以省略,默认为asc
- limit用来限制查询结果返回的行数,有2个参数(offset,count)
- limit中offset可以省略,默认值为0
- limit中offset 和 count都必须大于等于0
- limit中offset和count的值不能用表达式
- 分页排序时,排序不要有二义性,二义性情况下可能会导致分页结果乱序,可以在后面追加一个主键排序
SQL去重查询
方法一:使用distinct关键字
如果要在 students(学生) 表中去除 major(专业) 列中的重复值
---其中``反引号包裹只是为了区分mysql保留字---
select distinct `major` from student ---得到的是学生表中的所有专业类型;单字段去重---
select distinct `major`,classid from student ---得到的是学生表中班级和专业组合的不同类型,存在同一专业对应多个不同班级的情况;多字段去重---
注意:
- distinct语法规定对单字段、多字段去重,必须放在第一个查询字段前
- 如果对表中多列字段进行去重,去重的过程就是将多字段作为整体去重,即必须多字段完全相同才算重复
弊端: - 使用major字段进行去重,最终的结果,也只返回major一个字段
- 如果想以major字段去重,并且同时返回其他字段,DISTINCT是做不到的
方法二:使用group by 语法
如果要在 students(学生) 表中去除 major(专业) 列中的重复值
select `major` from student GROUP BY `major` ---得到的是学生表中的所有专业类型---
去重原理:将重复的行进行分组,相同的数据只显示第一行
弊端:支持同时返回其他字段,但是大概率会出现数据混乱的问题,也就是字段信息不完全匹配
在使用GROUP BY语句进行按多字段去重时,需要注意以下几点:
- SELECT语句中除了聚合函数之外,所有的字段都需要在GROUP BY语句中出现,否则数据会不准确或混乱。
- 如果SELECT语句中出现了聚合函数,则必须使用HAVING子句对聚合结果进行限制。
总结:无论使用哪种方法,都可以去除指定列中的重复值。需要注意的是,在使用 DISTINCT 关键字或者 GROUP BY 语句时,查询结果的顺序可能与原表的顺序不同,因为 SQL 并不保证结果的顺序与查询顺序相同