MYSQL資料排序(八)ORDER BY

2021-08-20 13:24:25 字數 3888 閱讀 9931

當使用select語句從表中查詢資料時,結果集不會按任何順序排序。要對結果集排序,請使用order by子句。order by子句允許您:

下面介紹了order by子句的語法:

select column1, column2,...

from tbl

order

by column1 [asc|desc], column2 [asc|desc],...

asc代表公升序,desc代表降序。如果未指定排序規則,預設情況下,order by子句按公升序對結果集進行排序。

我們練習一些使用該order by子句的例子。

請參閱示例資料庫中的下customers表。

以下從customers表中查詢聯絡人,並按姓氏公升序排序結果集。

select

contactlastname,

contactfirstname

from

customers

order

by contactlastname;

結果如下圖所示:

如果要按聯絡人姓氏降序排序,請使用:order by contactlastname desc

select

contactlastname,

contactfirstname

from

customers

order

by contactlastname desc;

結果如下圖所示:

如果你要按contactlastname公升序排序,再按contactfirstname降序排序,可以使用以下sql語句:

select

contactlastname,

contactfirstname

from

customers

order

by contactlastname desc,

contactfirstname asc;

結果如下圖所示:

order by子句還允許您基於表示式對結果集進行排序。

請參考orderdetails見下表。

以下sql語句從orderdetails表中查詢訂單詳細。並根據ordernumber,orderlinenumber和quantityordered * priceeach對結果集進行排序。

select

ordernumber,

orderlinenumber,

quantityordered * priceeach

from

orderdetails

order

by ordernumber,

orderlinenumber,

quantityordered * priceeach;

結果如下圖所示:

為了使查詢更具可讀性,可以使用別名對下列查詢進行排序:

select

ordernumber,

orderlinenumber,

quantityordered * priceeach as subtotal

from

orderdetails

order

by ordernumber,

orderlinenumber,

subtotal;

我們為列quantityordered * priceeach區別名為subtotal,然後在排序的時候用別名subtotal代替quantityordered * priceeach,這樣sql**更簡潔易讀。

order by子句允許您使用field()函式為列中的值定義自己的排序順序。

請參orders見下表。

例如,如果要按照status字段值的以下順序對orders表進行排序:

您可以使用order by結合field函式實現,如:

select 

ordernumber, status

from

orders

order

byfield(status,

'in process',

'on hold',

'cancelled',

'resolved',

'disputed',

'shipped');

結果如下圖所示:

在某些情況中,mysql可以使用乙個索引來滿足order by子句,而不需要額外的排序。where條件和order by使用相同的索引,並且order by的順序和索引順序相同,並且order by的字段都是公升序或者都是降序。

例如:下列sql可以使用索引。

select * from t1 order

by key_part1,key_part2,... ;

select * from t1 where key_part1=1

order

by key_part1 desc, key_part2 desc;

select * from t1 order

by key_part1 desc, key_part2 desc;

但是以下情況不使用索引。

1) order by的字段混合asc和desc

select * from t1 order

by key_part1 desc, key_part2 asc;

2) 用於查詢行的關鍵字與order by中所使用的不相同

select * from t1 where key2=constant order

by key1;

3)對不同的關鍵字使用order by

select * from t1 order

by key1, key2;

MYSQL資料排序(八)ORDER BY

當使用select語句從表中查詢資料時,結果集不會按任何順序排序。要對結果集排序,請使用order by子句。order by子句允許您 下面介紹了order by子句的語法 select column1,column2,from tbl order by column1 asc desc colu...

sql中order進行複雜排序

現有一網紅表,每乙個網紅都已乙個直播開始時間和直播結束時間,現在我想在列出網紅列表的時候,把當前時間正在直播的網紅放在前面 使用where語句中的between能把正在直播的篩選出來,但我並不是把正在直播的篩選出來,只是把他們靠前排列。如果先查詢出來結果,再迴圈判斷重新排序的話看似可以,但注意我每次...

SQL聯查語句加上order排序之後速度超級慢

專案中使用到了分頁查詢,形式如下 1 select from2 3select row number over order by a.id0 as seq,a.from 4pms t d stakecoordinate a 5left join zy t d route b on a.route c...