在執行查詢操作時,預設情況下會按照行資料插入的先後順序來顯示行資料,但在實際應用中經常需要對資料進行排序,以顯示更直觀的資料,資料排序用的就是ORDER BY子句。文法如下:
SELECT <*,column [alias],...> FROM table [WHERE condition[s]] [ORDER BY] expr [ASC|DESC];
1.升序排序
預設情況下,當使用ORDER BY執行排序操作時,資料以升序方式排序,也可以在排序列後指定ASC關鍵字。注意:當執行升序排序時,如果被排序列包含NULL值,那麼NULL會顯示在最後面。如:
SQL> SELECT ename,sal FROM emp WHERE deptno=30 ORDER BY sal;
2.降序排序
為了執行降序排序,必須要指定DESC關鍵字。注意:當執行降序排序時,如果排序列存在NULL值,那麼NULL會顯示在最前面。如:
SQL> SELECT ename,sal FROM emp WHERE deptno=30 ORDER BY sal DESC;
3.使用多列排序
當使用ORDER BY子句進行排序時,不僅可以基於單個列或單個運算式進行排序,也可以基於多個列或多個運算式,當以多個列或多個運算式進行排序時,首先按照第一個列或運算式進行,當第一個列或運算式存在相同資料時,然後按第二個列或運算式進行排序。如:
SQL> SELECT ename,sal,comm FROM emp WHERE deptno=30 ORDER BY sal ASC,comm DESC;
4.使用非選擇列進行排序
當使用ORDER BY 子句執行排序操作時,多數情況下挑選清單都會包含被排序列,但在實際情況下,挑選清單可以不包含排序列。如:
SQL> SELECT ename,job FROM emp ORDER BY sal DESC;
5.使用列別名排序
如果為列或運算式定義了別名,那麼當執行排序操作時,既可以使用列或運算式進行排序,也可以使用列別名進行排序。如:
SQL> SELECT ename,sal*12 AS "全年工資" FROM emp WHERE deptno=30 ORDER BY "全年工資" DESC;
6.使用列位置編號排序
當執行排序操作時,不僅可以指定列名,列別名進行排序,也可以按照列或運算式在挑選清單中的位置進行排序。如果列名或運算式名稱很長,那麼使用列位置排序可以縮短排序語句的長度,另外當使用UNION,NNION ALL,INTERSECT,MINUS等集合操作合并查詢結果時,如果列表的列名不同,並且希望進行排序,那麼必須使用列位置。如:
SQL> SELECT ename,sal*12 FROM emp WHERE deptno=20 ORDER BY 2 DESC;