Oracle查詢排序asc/desc 多列 order by


查詢結果的排序

顯示EMP表中不同的部門編號。
如果要在查詢的同時排序顯示結果,可以使用如下的語句:

Sql代碼
  1. SELECT 字段列表 FROM 表名 WHERE 條件   
  2.         ORDER BY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...];  
  1. SELECT 字段列表 FROM 表名 WHERE 條件  
  2.   ORDER BY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...];  


ORDER BY從句后跟要排序的列。ORDER BY 從句出現在SELECT語句的最后。
排序有升序和降序之分,ASC表示升序排序,DESC表示降序排序。如果不指明排序順序,默認的排序順序為升序ASC。如果要降序,必須書寫DESC關鍵字
1.升序排序
【訓練1】 查詢雇員姓名和工資,並按工資從小到大排序。
輸入並執行查詢:

Sql代碼
  1. SELECT ename, sal FROM emp ORDER BY sal;  
  1. SELECT ename, sal FROM emp ORDER BY sal;  


執行結果為:

Sql代碼
  1. ENAME             SAL   
  2.         ------------- --------------------   
  3.          SMITH              800   
  4.          JAMES              950  
  1. ENAME            SAL  
  2.   ------------- --------------------  
  3.   SMITH             800  
  4.   JAMES             950  


注意:若省略ASC和DESC,則默認為ASC,即升序排序。
2.降序排序
【訓練2】 查詢雇員姓名和雇佣日期,並按雇佣日期排序,后雇佣的先顯示。
輸入並執行查詢:

Sql代碼
  1. SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;  
  1. SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;  


結果如下:

Sql代碼
  1. ENAME        HIREDATE   
  2.         ------------- -----------------------   
  3.          ADAMS        23-5月 -87   
  4.          SCOTT        19-4月 -87   
  5. MILLER       23-1月 -82   
  6.          JAMES        03-12月-81   
  7.          FORD         03-12月-81  
  1. ENAME       HIREDATE  
  2.   ------------- -----------------------  
  3.   ADAMS     23-5月 -87  
  4.   SCOTT       19-4月 -87  
  5. MILLER      23-1月 -82  
  6.   JAMES       03-12月-81  
  7.   FORD        03-12月-81  


注意: DESC表示降序排序,不能省略。
3.多列排序
可以按多列進行排序,先按第一列,然后按第二列、第三列......。
【訓練3】 查詢雇員信息,先按部門從小到大排序,再按雇佣時間的先后排序。
輸入並執行查詢:

Sql代碼
  1. SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;  
  1. SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;  


結果如下:

Sql代碼
  1. ENAME        DEPTNO HIREDATE   
  2.         ---------------- ----------------- ---------------   
  3.          CLARK                   10 09-6月 -81   
  4.          KING                    10 17-11月-81   
  5.          MILLER                  10 23-1月 -82   
  6.          SMITH                   20 17-12月-80   
  7.          JONES                   20 02-4月 -81   
  8.          FORD                    20 03-12月-81   
  9.          SCOTT                   20 19-4月 -87  
  1. ENAME       DEPTNO HIREDATE  
  2.   ---------------- ----------------- ---------------  
  3.   CLARK               10 09-6月 -81  
  4.   KING                 10 17-11月-81  
  5.   MILLER               10 23-1月 -82  
  6.   SMITH                20 17-12月-80  
  7.   JONES                20 02-4月 -81  
  8.   FORD                20 03-12月-81  
  9.   SCOTT                20 19-4月 -87  


說明:該排序是先按部門升序排序,部門相同的情況下,再按雇佣時間升序排序。
4.在排序中使用別名
如果要對計算列排序,可以為計算列指定別名,然后按別名排序。
【訓練4】 按工資和工作月份的乘積排序。
輸入並執行查詢:

Sql代碼
  1. SELECT empno, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp   
  2.         ORDER BY total;  
  1. SELECT empno, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp   
  2.   ORDER BY total;  


執行結果為:

Sql代碼
  1. EMPNO ENAME          TOTAL   
  2.     ------------ ------------- ----------------------   
  3.          7876     ADAMS        221526.006   
  4.          7369     SMITH        222864.661   
  5.          7900     JAMES        253680.817   
  6.           7654    MARTIN       336532.484  
  1. EMPNO ENAME         TOTAL  
  2.   ------------ ------------- ----------------------  
  3.       7876 ADAMS      221526.006  
  4.       7369  SMITH       222864.661  
  5.       7900  JAMES       253680.817  
  6.       7654  MARTIN     336532.484  


sysdate獲取當前日期。

練習題:

1.SQL語言中用來創建、刪除及修改數據庫對象的部分被稱為:
A. 數據庫控制語言(DCL)
B. 數據庫定義語言(DDL)
C. 數據庫操縱語言(DML)
D. 數據庫事務處理語言

2.執行以下查詢,表頭的顯示為:
   

Sql代碼
  1. SELECT sal "Employee Salary" FROM emp  
  1. SELECT sal "Employee Salary" FROM emp  


     A. EMPLOYEE SALARY B. employee salary
     C. Employee Salary D. "Employee Salary“
3.執行如下兩個查詢,結果為:

Sql代碼
  1. SELECT ename name,sal salary FROM emp order by salary;   
  2.         SELECT ename name,sal "SALARY" FROM emp order by sal ASC;  
  1. SELECT ename name,sal salary FROM emp order by salary;  
  2.   SELECT ename name,sal "SALARY" FROM emp order by sal ASC;  


A. 兩個查詢結果完全相同
B. 兩個查詢結果不相同
C. 第一個查詢正確,第二個查詢錯誤
D. 第二個查詢正確,第一個查詢錯誤
4.參考本章的emp表的內容執行下列查詢語句,出現在第一行上的人是:

Sql代碼
  1. SELECT ename FROM emp WHERE deptno=10 ORDER BY sal DESC;  
  1. SELECT ename FROM emp WHERE deptno=10 ORDER BY sal DESC;  


A. SMITH B. KING
C. MILLER D. CLARK
5.哪個函數與||運算有相同的功能:
A. LTRIM B. CONCAT
C. SUBSTR D. INSTR
6.執行以下語句后,正確的結論是:

Sql代碼
  1. SELECT empno,ename FROM emp WHERE hiredate<to_date('04-11月-1980')-100  
  1. SELECT empno,ename FROM emp WHERE hiredate<to_date('04-11月-1980')-100  


A. 顯示給定日期后100天以內雇佣的雇員信息
B. 顯示給定日期前100天以內雇佣的雇員信息
C. 顯示給定日期100天以后雇佣的雇員信息
D. 顯示給定日期100天以前雇佣的雇員信息
7.執行以下語句出錯的行是:
     

Sql代碼
  1. SELECT deptno,max(sal) FROM emp   
  2.              WHERE job IN('CLERK','SALEMAN','ANALYST')   
  3.              GROUP BY deptno   
  4.               HAVING sal>1500;  
  1. SELECT deptno,max(sal) FROM emp   
  2.        WHERE job IN('CLERK','SALEMAN','ANALYST')  
  3.        GROUP BY deptno  
  4.         HAVING sal>1500;  


A. 第一行 B. 第二行
C. 第三行 D. 第四行
8.執行以下語句出錯的行是:

Sql代碼
  1. SELECT deptno,max(avg(sal))   
  2.         FROM emp   
  3.         WHERE sal>1000   
  4.         Group by deptno;  
  1. SELECT deptno,max(avg(sal))   
  2.   FROM emp   
  3.   WHERE sal>1000  
  4.   Group by deptno;  


A. 第一行 B. 第二行
C. 第三行 D. 第四行
9.執行以下語句出錯的行是:

Sql代碼
  1. SELECT deptno,dname,ename,sal   
  2. FROM emp,dept   
  3. WHERE emp.deptno=dept.deptno   
  4. AND sal>1000;  
  1. SELECT deptno,dname,ename,sal   
  2. FROM emp,dept  
  3. WHERE emp.deptno=dept.deptno  
  4. AND sal>1000;  


A. 第一行 B. 第二行
C. 第三行 D. 第四行
10. 以下語句出錯,哪種改動能夠正確執行:

Sql代碼
  1. SELECT    deptno, max(sal)   
  2. FROM emp   
  3. GROUP BY deptno   
  4. WHERE   max(sal)>2500;  
  1. SELECT   deptno, max(sal)  
  2. FROM emp  
  3. GROUP BY deptno  
  4. WHERE   max(sal)>2500;  


A. 將WHERE和GROUP BY 語句順序調換一下
B. 將WHERE max(sal)>2500語句改成HAVING max(sal)>2500
C. 將WHERE max(sal)>2500語句改成WHERE sal>2500
D. 將WHERE max(sal)>2500語句改成HAVING sal>2500
11. 以下語句的作用是:

Sql代碼
  1. SELECT ename,sal FROM emp   
  2.         WHERE sal<(SELECT min(sal) FROM emp)+1000;  
  1. SELECT ename,sal FROM emp  
  2.   WHERE sal<(SELECT min(sal) FROM emp)+1000;  


A. 顯示工資低於1000元的雇員信息
B. 將雇員工資小於1000元的工資增加1000后顯示
C. 顯示超過最低工資1000元的雇員信息
D. 顯示不超過最低工資1000元的雇員信息
12. 以下語句的作用是:

Sql代碼
  1. SELECT   job FROM emp WHERE deptno=10   
  2.          MINUS   
  3.         SELECT   job FROM emp WHERE deptno=20;  
  1. SELECT  job FROM emp WHERE deptno=10  
  2.   MINUS  
  3.   SELECT  job FROM emp WHERE deptno=20;  


A. 顯示部門10的雇員職務和20的雇員職務
B. 顯示部門10和部門20共同的雇員職務
C. 顯示部門10和部門20不同的雇員職務
D. 顯示在部門10中出現,在部門20中不出現的雇員職務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM