導引本文主要是針對在微頭條上發(fā)布關于SQL查詢排序的常規(guī)實操案例的匯總,以便收藏在線查閱。 關于查詢排序的參考示例主要有: 1.如何實現(xiàn)以指定的次序返回查詢結果? 比如我們要對部門編號為3的員工工資的按升序排列結果,可以這樣進行SQL語句的編寫: select ename,job,salary,comm from employee where departid = 2 order by salary asc 這樣即可。 這類需要注意的是排序關鍵字,然后指明排序的字段名(或者字段位置編號,從1開始,這里可以替換為order by 3);另外,asc是可選的,若不顯示指出,即為升序(最小的在第一行),若要降序,則改為order by columnname desc即可。若這樣,本查詢中salary具有最大值的在第一行。
2.對多個字段排序及注意事項 假設有這樣的場景需求,即根據(jù)雇傭日期降序排序,再對部門員工的薪資進行升序排序,如何實現(xiàn)?我們可以這樣來進行SQL語句的編寫:
select * from employee order by hiredate desc ,salary asc 這里排序是要注意的語法寫法,即order by后可以逗號分隔多個字段進行排序,字段也可用列的位置編號進行,并指定相應的排序方式:asc 或desc。
注意點:1)order by 的優(yōu)先次序是從左到右的; 2)可以以select字段列表中沒出現(xiàn)的列來排序,但必須給出列名; 3)如果使用了group by 或distinct,則不能按照select列表中沒有的列來排序。 比如,你要寫SQL: select departid,sum(salary) sm from employee group by departid order by departid desc 這樣可以的,但若departid換成hiredate就錯了。 3.如何實現(xiàn)基于字段列值的子串排序? 要實現(xiàn)按字段值的子串排序,只要用substr函數(shù)即可(MS SQL用substring函數(shù)),實例如下:
select ename,job,salary from employee order by substr(job,length(job)-2) 。
也就是說,可使用DBMS內(nèi)置的子串函數(shù),很容易做到根據(jù)一部分值來排序。上面的SQL意思即為按照job最后兩個字符排序后返回結果。 若是SQL Server,則需要改為substring(job,len(job)-2,2),其子串函數(shù)需要指定獲取的字符數(shù)。 另外,也要注意各自內(nèi)置函數(shù)名的寫法或區(qū)別,以免運行出錯。 4.如何在order by中用動態(tài)指定排序列? 在寫SQL語句時,我們是可在排序子句中應用case語句動態(tài)指定排序字段的。具體實現(xiàn)如下:
select ename,salary.job,comm
from employee order by case when job='經(jīng)理' then salary else comm end 這樣就可以使用case表達式來動態(tài)改變?nèi)绾螌Y果排序了。上面是直接在order by子句中實現(xiàn)的。其實這相于于在select字段列表中增加了一列,然后按照新增列排序。如果在select列中增加一列,在結合order by 的按列位置排序,其完整的句子參考如下: select ename ,salary,job,comm,case when job ='經(jīng)理' then comm else salary end as ordercolumn from employee order by 5 當然,你可以把5換為case列別名ordercoulumn。就這樣了,試試吧。
常用的關于單表排序操作,基本上就這些。后面還會繼續(xù)講些SQL的看了能用的實例SQL寫法。下一篇將是關注多表的操作。本篇就想到這里了。轉(zhuǎn)發(fā)出去吧
|