排序和分页(order by、limit)

电商中:我们想查看今天所有成交的订单,按照交易额从高到低排序,此时我们可以使用数据库中的排序。

排序语法:

select 字段名 from 表名 order by 字段1 [asc|desc], 字段2 [asc|desc];

需要排序的字段跟在order by之后;

asc|desc 表示排序的规则,asc:升序 desc:降序 默认为升序asc;

支持多个字段进行排序,多字段排序之间用逗号隔开

单字段排序:

select * from test2 order by a asc;

select * from test2 order by a desc;

多字段排序:

比如学生表,先按学生年龄降序,年龄相同时,再按学号升序,eg:

image.png

mysql>select * from stu order by age desc, id asc;

image.png

按别名排序:

mysql> select age '年龄', id as '学号' from stu order by 年龄 asc, 学号 desc;

image.png

按函数排序:

有学生表(id:编号, birth:出生日期,name:姓名)

image.png

需求:

按照出生年份升序,编号升序,查询出编号,出生日期,出生年份,姓名,2种写法:

mysql> select id '编号', birth '出生日期', year(birth) '出生年份', name as '姓名' from student order by year(birth), id ;

image.png

mysql> select id '编号', birth '出生日期', year(birth) '出生年份', name as '姓名' from student order by 出生年份, 编号 ;

image.png

说明:

year函数,属于日期函数,可以获取对应日期种的年份

where之后进行排序

有订单数据如下:

image.png

需求:

查询订单金额>=100的,按照订单金额降序排序,显示2列数据,列头:订单编号、订单金额:

mysql> select id '订单编号', price as '订单金额' from t_order where price>=100 order by price desc;

image.png

limit介绍

limit用来限制select查询返回的行数,常用于分页等操作。

语法:

select 列 from 表 limit [offset,] count;

说明:

offset:表示偏移量,通俗点讲就是跳过多少行,offset可以省略,默认为0,表示跳过0行,范围:0到正无穷

count:跳过offset行之后开始取数据,取count行记录,范围:0到正无穷

获取前n行记录:

select 列 from 表 limit 0,n;

或者

select 列 from 表 limit n;

image.png

eg:获取订单的前2条记录

mysql> select * from t_order limit 2;

image.png

获取最大的一条记录

我们需要获取订单金额最大的一条记录,可以这么做:先按照金额降序,然后取第一条记录

mysql> select id '订单编号', price as '订单金额' from t_order order by price desc limit 1;

image.png

获取排名n到m的记录

语法:需要先跳过n-1条记录,然后取m-m+1条记录

select 列 from 表 limit n-1,m-n+1;

eg:获取订单金额最高的3到5的记录

先跳过2条,取3条记录

image.png

分页查询

分页经常使用,一般2个参数:

page: 表示第几页,从1开始,范围1到正无穷

pageSize:每页显示多少条记录,范围1到正无穷

如:page=2,pageSize=10,表示获取第2页10条数据

使用limit实现分页,语法:

select 列 from 表名 limit (page - 1) * pageSize,pageSize;

需求:我们按照订单金额降序,每页显示2条,依次获取所有订单数据、第1页,第2页、第3页数据,如下:

image.png

第一页:

image.png

第二页:

image.png

第四页:

image.png

***避免踩坑

limit中不能使用表达式

image.png

limit后面的2个数字不能为负数

image.png

排序分页存在的坑:

***当排序中存在相同的值时,需要再指定一个排序规则

总结

  • order by…[asc|desc]用于对查询结果排序,asc:升序,desc:降序,默认为升序

  • limit 用来限制查询结果返回的行数,有2个参数(offset,cont)offset:表示跳过多少行,count:表示跳过offset行之后取count行

  • limit中的offset可以省略,默认值为0

  • limit中offset和count都必须大于等于0

  • limit中offset和count的值不能用表达式

  • 分页排序时,排序不要有二义性,二义性情况下可能导致分页结果乱序,可以在后面追加一个主键排序,比如有相同值的情况下

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容