【Oracle命令】sql語句之排序(order by)

經過對數據庫數據進行降序排序來達到顯示最新數據在前面的效果

-- 降序排序(最新的顯示在前面) SELECT * FROM 表名 t ORDER BY t.uploadDatetime DESC;

格式:

ORDER BY { column-Name | ColumnPosition | Expression } [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] [ , column-Name | ColumnPosition | Expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] ] *

PS:默認爲升序ASChtml

知識點:

  • order by 後面能夠接列號(數字)、列名、別名、表達式、函數、分組函數
  • order by 對空值的處理,DESC空值在前,ASC空值在後;
  • order by子句中能夠不含select中的列;
  • 當使用select distinctgroup by時,order by 不能使用select以外的列;
  • order by 只能放最後,不能放集合操做的中間;
  • 集合操做後,不接order by按第一列進行升序排序(union all除外);
  • 集合操做後的列名爲第一個select的內容,order by 只能選第一個select中的內容進行操做
select job, avg(sal) "Average Salary" 
from emp group by job order by "Average Salary" DESC;

補充:

  Union(union all): 指令的目的是將兩個 SQL 語句的結果集合並起來,獲得你所須要的查詢結果。mysql

  Union:對兩個結果集進行並集操做,不包括重複行,同時進行默認規則的排序;sql

  Union All:對兩個結果集進行並集操做,包括重複行,不進行排序;數據庫

  order by子句必須寫在最後一個結果集裏,而且其排序規則將改變操做後的排序結果。對於Union、Union All都有效。oracle

實例:

1)按照名稱排序(默認升序)、按照名稱升序(ASC),按照名稱降序(DESC),若是名稱有相同的按照id降序排序(降序至關於顯示最新的在前面)函數

-- 默認升序
SELECT * FROM t_test t ORDER BY t.content; -- 按名稱升序
SELECT * FROM t_test t ORDER BY t.content ASC;

-- 按名稱降序
SELECT * FROM t_test t ORDER BY t.content DESC

 

-- 名稱相同的按id降序(將最新的排序)。這裏我新添加了一條數據test4
SELECT * FROM t_test t ORDER BY t.content DESC,t.id DESC;

 

 2)缺省處理:oracle在order by時認爲null是最大值, 因此若是是asc升序則排在最後, desc降序則排在最前.咱們能夠使用nulls first或者nulls last來控制null的位置。spa

-- 升序顯示,默認null值在後面,使用nulls first將null顯示在最前面
SELECT * FROM t_test t ORDER BY t.content ASC NULLS FIRST; -- 降序顯示,默認null值在前面,使用null last將null顯示在最後面
SELECT * FROM t_test t ORDER BY t.content DESC NULLS FIRST;

mysql的以下:.net

-- null值顯示在最前面
SELECT * FROM t_test t ORDER BY IF(ISNULL(t.content),0,1),t.content ASC; -- null值顯示在最後面
SELECT * FROM t_test t ORDER BY IF(ISNULL(t.content),1,0),t.content DESC;

3)將名稱帶有"test"的先顯示,其他按照名稱升序排序code

在這裏因爲少了別名,出現報錯,不過已解決htm

能夠參考個人另外一篇博客文章:http://www.javashuo.com/article/p-gahssocz-bo.html

select * from t_test t1 where t1.content like '%test%'
Union all
select * from (select * from t_test t2 where t2.content not like '%test%' order by t2.content asc) d;

上面的方法沒有把null值顯示出來。另外一種方法也可實現,並顯示null值

select * from t_test t order by 
case
  when t.content like '%test%' then 0
  else  1
end,t.content asc;

 

 4)按照id爲6的排到第一位,其他按照id降序排序

select * from t_test order by decode(id, 6,1), id desc; 

PS:

  DECODE函數的語法:DECODE(value,if1,then1,if2,then2,if3,then3,…,else);
  DECODE函數說明:表示若是value等於if1時,DECODE函數的結果返回then1,…,若是不等於任何一個if值,則返回else。
  sign函數語法:sign(n); 
  sign函數說明:取數字n的符號,大於0返回1,小於0返回-1,等於0返回0(n能夠是表達式,(n-200))。 

 

 

參考網址:https://blog.csdn.net/tian_tian2/article/details/80816275

相關文章
相關標籤/搜索