電商中:我們想查看今天所有成交的訂單值纱,按照交易額從高到低排序,此時我們可以使用數(shù)據(jù)庫中的排序坯汤。
排序語法:
select 字段名 from 表名 order by 字段1 [asc|desc], 字段2 [asc|desc]虐唠;
需要排序的字段跟在order by之后;
asc|desc 表示排序的規(guī)則惰聂,asc:升序 desc:降序 默認(rèn)為升序asc疆偿;
支持多個字段進(jìn)行排序,多字段排序之間用逗號隔開
單字段排序:
select * from test2 order by a asc;
select * from test2 order by a desc;
多字段排序:
比如學(xué)生表搓幌,先按學(xué)生年齡降序翁脆,年齡相同時,再按學(xué)號升序鼻种,eg:
mysql>select * from stu order by age desc, id asc;
按別名排序:
mysql> select age '年齡', id as '學(xué)號' from stu order by 年齡 asc, 學(xué)號 desc;
按函數(shù)排序:
有學(xué)生表(id:編號, birth:出生日期反番,name:姓名)
需求:
按照出生年份升序,編號升序叉钥,查詢出編號罢缸,出生日期,出生年份投队,姓名枫疆,2種寫法:
mysql> select id '編號', birth '出生日期', year(birth) '出生年份', name as '姓名' from student order by year(birth), id ;
mysql> select id '編號', birth '出生日期', year(birth) '出生年份', name as '姓名' from student order by 出生年份, 編號 ;
說明:
year函數(shù),屬于日期函數(shù)敷鸦,可以獲取對應(yīng)日期種的年份
where之后進(jìn)行排序
有訂單數(shù)據(jù)如下:
需求:
查詢訂單金額>=100的息楔,按照訂單金額降序排序,顯示2列數(shù)據(jù)扒披,列頭:訂單編號值依、訂單金額:
mysql> select id '訂單編號', price as '訂單金額' from t_order where price>=100 order by price desc;
limit介紹
limit用來限制select查詢返回的行數(shù),常用于分頁等操作碟案。
語法:
select 列 from 表 limit [offset,] count;
說明:
offset:表示偏移量愿险,通俗點講就是跳過多少行,offset可以省略价说,默認(rèn)為0辆亏,表示跳過0行风秤,范圍:0到正無窮
count:跳過offset行之后開始取數(shù)據(jù),取count行記錄扮叨,范圍:0到正無窮
獲取前n行記錄:
select 列 from 表 limit 0,n;
或者
select 列 from 表 limit n;
eg:獲取訂單的前2條記錄
mysql> select * from t_order limit 2;
獲取最大的一條記錄
我們需要獲取訂單金額最大的一條記錄缤弦,可以這么做:先按照金額降序,然后取第一條記錄
mysql> select id '訂單編號', price as '訂單金額' from t_order order by price desc limit 1;
獲取排名n到m的記錄
語法:需要先跳過n-1條記錄彻磁,然后取m-m+1條記錄
select 列 from 表 limit n-1,m-n+1碍沐;
eg:獲取訂單金額最高的3到5的記錄
先跳過2條,取3條記錄
分頁查詢
分頁經(jīng)常使用兵迅,一般2個參數(shù):
page: 表示第幾頁抢韭,從1開始,范圍1到正無窮
pageSize:每頁顯示多少條記錄恍箭,范圍1到正無窮
如:page=2刻恭,pageSize=10,表示獲取第2頁10條數(shù)據(jù)
使用limit實現(xiàn)分頁扯夭,語法:
select 列 from 表名 limit (page - 1) * pageSize,pageSize;
需求:我們按照訂單金額降序鳍贾,每頁顯示2條,依次獲取所有訂單數(shù)據(jù)交洗、第1頁骑科,第2頁、第3頁數(shù)據(jù)构拳,如下:
第一頁:
第二頁:
第四頁:
***避免踩坑
limit中不能使用表達(dá)式
limit后面的2個數(shù)字不能為負(fù)數(shù)
排序分頁存在的坑:
***當(dāng)排序中存在相同的值時咆爽,需要再指定一個排序規(guī)則
總結(jié)
order by…[asc|desc]用于對查詢結(jié)果排序,asc:升序置森,desc:降序斗埂,默認(rèn)為升序
limit 用來限制查詢結(jié)果返回的行數(shù),有2個參數(shù)(offset,cont)offset:表示跳過多少行凫海,count:表示跳過offset行之后取count行
limit中的offset可以省略呛凶,默認(rèn)值為0
limit中offset和count都必須大于等于0
limit中offset和count的值不能用表達(dá)式
分頁排序時,排序不要有二義性行贪,二義性情況下可能導(dǎo)致分頁結(jié)果亂序漾稀,可以在后面追加一個主鍵排序,比如有相同值的情況下