當使用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...