电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

MySQL 查詢的排序、分頁相關

瀏覽:164日期:2023-10-09 11:13:15

概述

數據庫中的數據直接呈現出來一般不是我們想要的,所以我們上兩節演示了如何對數據進行過濾的方法。除了對數據進行過濾,

我們可能還需要對數據進行排序,比如想從列表中了解消費最高的項,就可能需要對金額字段做降序排序,想看年齡從小到大的分布情況,就可能需要對user表的age字段進行升序排序。

也可能需要對數據進行限制,比如我們需要對付款的1~10,11~20,21~30 名的用戶分別贈予不同的禮品,這時候對數據的限制就很有用了。

備注:下面腳本中[]包含的表示可選,| 分隔符表示可選其一。

數據排序 order by

語法格式如下:

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

2、asc 和 desc表示排序的規則,asc:升序,desc:降序,默認為升序 asc;

3、排序可以指定多次字段,多字段排序之間用逗號隔開。

4、多字段排序中,越靠前優先級越高,下面中cname1優先排序,當cname1等值的時候,cname2開始排序,直至所有字段都排序完。

select cname from tname order by cname1 [asc|desc],cname2 [asc|desc]...;

單個字段排序

舉個例子,在銷售額中通按照交易的訂單進行金額額度降序的方式顯示:

mysql> select * from t_order;+---------+---------+---------+-------+| orderid | account | amount | goods |+---------+---------+---------+-------+| 8 | brand | 52.2 | 2 || 9 | hen | 1752.02 | 7 || 10 | helyn | 88.5 | 4 || 11 | sol | 1007.9 | 11 || 12 | diny | 12 | 1 || 13 | weng | 52.2 | 5 || 14 | sally | 99.71 | 9 |+---------+---------+---------+-------+7 rows in setmysql> select * from t_order order by amount desc;+---------+---------+---------+-------+| orderid | account | amount | goods |+---------+---------+---------+-------+| 9 | hen | 1752.02 | 7 || 11 | sol | 1007.9 | 11 || 14 | sally | 99.71 | 9 || 10 | helyn | 88.5 | 4 || 8 | brand | 52.2 | 2 || 13 | weng | 52.2 | 5 || 12 | diny | 12 | 1 |+---------+---------+---------+-------+7 rows in set

多個字段排序

多個字段排序用逗號隔開,優先級從左到右逐次遞減,如下圖,如果金額一致,則按照購買商品數量從多到少排序:

mysql> select * from t_order order by amount desc,goods desc;+---------+---------+---------+-------+| orderid | account | amount | goods |+---------+---------+---------+-------+| 9 | hen | 1752.02 | 7 || 11 | sol | 1007.9 | 11 || 14 | sally | 99.71 | 9 || 10 | helyn | 88.5 | 4 || 13 | weng | 52.2 | 5 || 8 | brand | 52.2 | 2 || 12 | diny | 12 | 1 |+---------+---------+---------+-------+7 rows in set

按alias排序

按照別名排序或者做條件查詢的目的都是為了簡化代碼,方便使用,別名可以是英文,也可以是中文:

mysql> select account as ac,amount as am,goods as gd from t_order order by am,gd desc;+-------+---------+----+| ac | am | gd |+-------+---------+----+| diny | 12 | 1 || weng | 52.2 | 5 || brand | 52.2 | 2 || helyn | 88.5 | 4 || sally | 99.71 | 9 || sol | 1007.9 | 11 || hen | 1752.02 | 7 |+-------+---------+----+7 rows in set

字段排序中使用函數

下面使用了abs取絕對值函數,所以在 am字段降序排序中,-99.99 排在 99.71之上。

mysql> select * from t_order;+---------+---------+---------+-------+| orderid | account | amount | goods |+---------+---------+---------+-------+| 8 | brand | 52.2 | 2 || 9 | hen | 1752.02 | 7 || 10 | helyn | 88.5 | 4 || 11 | sol | 1007.9 | 11 || 12 | diny | 12 | 1 || 13 | weng | 52.2 | 5 || 14 | sally | 99.71 | 9 || 15 | brand1 | -99.99 | 5 |+---------+---------+---------+-------+8 rows in setmysql> select account as ac,amount as am,goods as gd from t_order order by abs(am) desc;+--------+---------+----+| ac | am | gd |+--------+---------+----+| hen | 1752.02 | 7 || sol | 1007.9 | 11 || brand1 | -99.99 | 5 || sally | 99.71 | 9 || helyn | 88.5 | 4 || brand | 52.2 | 2 || weng | 52.2 | 5 || diny | 12 | 1 |+--------+---------+----+8 rows in set

與Where條件結合使用

order 在 where 條件之后,根據where已經過濾好的數據再進行排序。下面是過濾出購買金額>80 且 購買數量>5的數據,并且按照價格降序排序。

mysql> select * from t_order;+---------+---------+---------+-------+| orderid | account | amount | goods |+---------+---------+---------+-------+| 8 | brand | 52.2 | 2 || 9 | hen | 1752.02 | 7 || 10 | helyn | 88.5 | 4 || 11 | sol | 1007.9 | 11 || 12 | diny | 12 | 1 || 13 | weng | 52.2 | 5 || 14 | sally | 99.71 | 9 || 15 | brand1 | -99.99 | 5 |+---------+---------+---------+-------+8 rows in setmysql> select * from t_order where amount>80 and goods>5 order by amount desc;+---------+---------+---------+-------+| orderid | account | amount | goods |+---------+---------+---------+-------+| 9 | hen | 1752.02 | 7 || 11 | sol | 1007.9 | 11 || 14 | sally | 99.71 | 9 |+---------+---------+---------+-------+

數據limit

很多時候我們過濾出符合要求的數據之后,還需要得到這些數據中的某一個具體區間,比如對付款超過1000的用戶的第1~10,11~20,21~30 名分別贈予不同的禮品,這時候就要使用limit操作了。

limit用來限制select查詢返回的數據,常用于數據排行或者分頁等情況。

語法格式如下:

select cname from tname limit [offset,] count;

1、offset表示偏移量,就是指跳過的行數,可以省略不寫,默認為0,表示跳過0行,如 limit 8 等同于 limit 0,8。

2、count:跳過偏移量offset之后開始取的數據行數,有count行。

3、limit中offset和count的值不能用表達式。

獲取前n條記錄

如下圖,limit n 和 limit 0,n 是一致的:

mysql> select * from t_order;+---------+---------+---------+-------+| orderid | account | amount | goods |+---------+---------+---------+-------+| 8 | brand | 52.2 | 2 || 9 | hen | 1752.02 | 7 || 10 | helyn | 88.5 | 4 || 11 | sol | 1007.9 | 11 || 12 | diny | 12 | 1 || 13 | weng | 52.2 | 5 || 14 | sally | 99.71 | 9 || 15 | brand1 | -99.99 | 5 |+---------+---------+---------+-------+8 rows in setmysql> select * from t_order limit 2;+---------+---------+---------+-------+| orderid | account | amount | goods |+---------+---------+---------+-------+| 8 | brand | 52.2 | 2 || 9 | hen | 1752.02 | 7 |+---------+---------+---------+-------+2 rows in setmysql> select * from t_order limit 0,2;+---------+---------+---------+-------+| orderid | account | amount | goods |+---------+---------+---------+-------+| 8 | brand | 52.2 | 2 || 9 | hen | 1752.02 | 7 |+---------+---------+---------+-------+2 rows in set

limit限制單條記錄

這邊我們獲取支付金額中最大和最小的的一條記錄。可以先使用 order 條件進行排序,然后limit 第1條記錄即可:

mysql> select * from t_order; +---------+---------+---------+-------+ | orderid | account | amount | goods | +---------+---------+---------+-------+ | 8 | brand | 52.2 | 2 | | 9 | hen | 1752.02 | 7 | | 10 | helyn | 88.5 | 4 | | 11 | sol | 1007.9 | 11 | | 12 | diny | 12 | 1 | | 13 | weng | 52.2 | 5 | | 14 | sally | 99.71 | 9 | | 15 | brand1 | -99.99 | 5 | +---------+---------+---------+-------+ 8 rows in set mysql> select * from t_order where amount>0 order by amount desc limit 1; +---------+---------+---------+-------+ | orderid | account | amount | goods | +---------+---------+---------+-------+ | 9 | hen | 1752.02 | 7 | +---------+---------+---------+-------+ 1 row in set mysql> select * from t_order where amount>0 order by amount asc limit 1; +---------+---------+--------+-------+ | orderid | account | amount | goods | +---------+---------+--------+-------+ | 12 | diny | 12 | 1 | +---------+---------+--------+-------+ 1 row in set

以上就是MySQL 查詢的排序、分頁相關的詳細內容,更多關于MySQL 查詢的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | MVR蒸发器厂家-多效蒸发器-工业废水蒸发器厂家-康景辉集团官网 | 开平机_纵剪机厂家_开平机生产厂家|诚信互赢-泰安瑞烨精工机械制造有限公司 | 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 内六角扳手「厂家」-温州市威豪五金工具有限公司 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 酒精检测棒,数显温湿度计,酒安酒精测试仪,酒精检测仪,呼气式酒精检测仪-郑州欧诺仪器有限公司 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 温泉机设备|温泉小镇规划设计|碳酸泉设备 - 大连连邦温泉科技 | 热处理温控箱,热处理控制箱厂家-吴江市兴达电热设备厂 | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 陕西高职单招-陕西高职分类考试网| 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 禹城彩钢厂_钢结构板房_彩钢复合板-禹城泰瑞彩钢复合板加工厂 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 小小作文网_中小学优秀作文范文大全 | 工程管道/塑料管材/pvc排水管/ppr给水管/pe双壁波纹管等品牌管材批发厂家-河南洁尔康建材 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 三防漆–水性三防漆–水性浸渍漆–贝塔三防漆厂家 | 半容积式换热器_北京浮动盘管换热器厂家|北京亿丰上达 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | 智慧消防-消防物联网系统云平台| 搬运设备、起重设备、吊装设备—『龙海起重成套设备』 | 碎石机设备-欧版反击破-欧版颚式破碎机(站)厂家_山东奥凯诺机械 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | 粤丰硕水性环氧地坪漆-防静电自流平厂家-环保地坪涂料代理 | 焊接烟尘净化器__焊烟除尘设备_打磨工作台_喷漆废气治理设备 -催化燃烧设备 _天津路博蓝天环保科技有限公司 | 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 复合肥,化肥厂,复合肥批发,化肥代理,复合肥品牌-红四方 | 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 青海电动密集架_智能密集架_密集架价格-盛隆柜业青海档案密集架厂家 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 微妙网,专业的动画师、特效师、CG模型设计师网站! - wmiao.com 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 |