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

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

查詢結果的排序

顯示EMP表中不同的部門編號。
如果要在查詢的同時排序顯示結果,可以使用如下的語句:
Sql代碼
  1. SELECT 字段列表 FROM 表名 WHERE 條件
  2. ORDER BY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...];
SELECT 字段列表 FROM 表名 WHERE 條件 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;
SELECT ename, sal FROM emp ORDER BY sal;
執行結果爲:
Sql代碼
  1. ENAME SAL
  2. ------------- --------------------
  3. SMITH 800
  4. JAMES 950
ENAME SAL ------------- -------------------- SMITH 800 JAMES 950
注意:若省略ASC和DESC,則默認爲ASC,即升序排序。
2.降序排序
【訓練2】 查詢僱員姓名和僱傭日期,並按僱傭日期排序,後僱傭的先顯示。
輸入並執行查詢:
Sql代碼
  1. SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;
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
ENAME HIREDATE ------------- ----------------------- ADAMS 23-5月 -87 SCOTT 19-4月 -87MILLER 23-1月 -82 JAMES 03-12月-81 FORD 03-12月-81
注意: DESC表示降序排序,不能省略。
3.多列排序
可以按多列進行排序,先按第一列,然後按第二列、第三列......。
【訓練3】 查詢僱員信息,先按部門從小到大排序,再按僱傭時間的先後排序。
輸入並執行查詢:
Sql代碼
  1. SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;
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
ENAME DEPTNO HIREDATE ---------------- ----------------- --------------- CLARK 10 09-6月 -81 KING 10 17-11月-81 MILLER 10 23-1月 -82 SMITH 20 17-12月-80 JONES 20 02-4月 -81 FORD 20 03-12月-81 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;
SELECT empno, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp 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
EMPNO ENAME TOTAL ------------ ------------- ---------------------- 7876 ADAMS 221526.006 7369 SMITH 222864.661 7900 JAMES 253680.817 7654 MARTIN 336532.484
sysdate獲取當前日期。

練習題:

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

2.執行以下查詢,表頭的顯示爲:
Sql代碼
  1. SELECT sal "Employee Salary" FROM emp
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;
SELECT ename name,sal salary FROM emp order by salary; 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;
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
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;
SELECT deptno,max(sal) FROM emp WHERE job IN('CLERK','SALEMAN','ANALYST') GROUP BY deptno 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;
SELECT deptno,max(avg(sal)) FROM emp WHERE sal>1000 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;
SELECT deptno,dname,ename,sal FROM emp,deptWHERE emp.deptno=dept.deptnoAND 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;
SELECT deptno, max(sal)FROM empGROUP BY deptnoWHERE 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;
SELECT ename,sal FROM emp 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;
SELECT job FROM emp WHERE deptno=10 MINUS SELECT job FROM emp WHERE deptno=20;
A. 顯示部門10的僱員職務和20的僱員職務
B. 顯示部門10和部門20共同的僱員職務
C. 顯示部門10和部門20不同的僱員職務
D. 顯示在部門10中出現,在部門20中不出現的僱員職務
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章