1.知識點:可以對照下面的錄屏進行閱讀
SQL> --字符串大小寫敏感
SQL> --查詢名叫KING的員工信息
SQL> select *
2 from emp
3 where ename = 'KING';
SQL> --日期格式敏感
SQL> --查詢入職日期為17-11月-81的員工
SQL> select *
2 from emp
3 where hiredate='17-11月-81'; --正確例子
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* where hiredate='1981-11-17' --錯誤例子
SQL> /
where hiredate='1981-11-17'
*
第 3 行出現錯誤:
ORA-01861: 文字與格式字符串不匹配
SQL> -- Oracle 9i之前,日期格式 DD-MON-YY 1998 --> 98 2098 --> 98 ; Oracle 9i之後 DD-MON-RR
SQL> --當前時間
SQL> select sysdate from dual;
SQL> --查詢系統參數
SQL> select * from v$nls_parameters;
SQL> --v$nls_parameters 數據字典
SQL> --修改日期格式
SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
SQL> --between ..and:在...之間
SQL> -- 1. 含邊界 2. 小值在前,大值在後
SQL> --查詢薪水1000~2000的員工
SQL> select *
2 from emp
3 where sal between 1000 and 2000;
SQL> --in: 在集合中
SQL> --查詢10和20號部門的員工
SQL> select *
2 from emp
3 where deptno in (10,20);
SQL> --查詢不是10和20號部門的員工
SQL> select *
2 from emp
3 where deptno not in (10,20)
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* where deptno not in (10,20,null) --在not in的作用范圍裡添加null字段後,顯示結果為空
SQL> --結論:如果集合中含有null值,不能使用not in操作符;但可以使用in
SQL> --like 模糊查詢 % _
SQL> --查詢名字以’S’打頭的員工信息
SQL> select *
2 from emp
3 where ename like 'S%';
SQL> --查詢名字是四個字的員工
SQL> select *
2 from emp
3 where ename like '____'; --4個_
SQL> --查詢名字中含義下劃線的員工
SQL> --使用轉義字符
SQL> select *
2 from emp
3 where ename like '%\_%' escape '\' --轉義字符不固定,但通常用’\’
SQL> --邏輯運算符
SQL> --and or
SQL> --SQL優化:2. 解析順序: 從右至左
SQL> --排序
SQL> --查詢員工信息,按照月薪排序
SQL> select *
2 from emp
3 order by sal;
SQL> --a命令 append,追加命令
SQL> a desc --a命令後空格至少2個空格
3* order by sal desc
SQL> --order by 後面 + 列名, 表達式, 別名, 序號
SQL> select ename,sal,comm,sal*12+nvl(comm,0)
2 from emp
3 order by sal*12+nvl(comm,0); --列名,表達式
SQL> ed
已寫入 file afiedt.buf
1 select ename,sal,comm,sal*12+nvl(comm,0) 年收入
2 from emp
3* order by 年收入 --別名
SQL> /
SQL> ed
已寫入 file afiedt.buf
1 select ename,sal,comm,sal*12+nvl(comm,0) 年收入
2 from emp
3* order by 4 --序號
SQL> /
SQL> --order by跟多列:作用於後面所有的列
SQL> --desc離他最近的一列
SQL> select *
2 from emp
3 order by deptno,sal desc --先按deptno升序排列,然後按sal降序排列
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3 order by comm desc --按comm降序排序
4* nulls last --空值放最後
SQL> --查詢10號部門員工
SQL> select *
2 from emp
3 where deptno=10;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7839 KING PRESIDENT 17-11月-81 5000 10
7934 MILLER CLERK 7782 23-1月 -82 1300 10
SQL> --字符串大小寫敏感
SQL> --查詢名叫KING的員工信息
SQL> select *
2 from emp
3 where ename = 'KING';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7839 KING PRESIDENT 17-11月-81 5000 10
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* where ename = 'king'
SQL> /
未選定行
SQL> --日期格式敏感
SQL> --查詢入職日期為17-11月-81的員工
SQL> select *
2 from emp
3 where hiredate='17-11月-81';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7839 KING PRESIDENT 17-11月-81 5000 10
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* where hiredate='1981-11-17'
SQL> /
where hiredate='1981-11-17'
*
第 3 行出現錯誤:
ORA-01861: 文字與格式字符串不匹配
SQL> desc emp
名稱 是否為空? 類型
----------------------------------------------------------------- -------- --------------------------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> /*
SQL> Oracle 9i之前,日期格式
SQL> DD-MON-YY 1998 --> 98
SQL> 2098 --> 98
SQL>
SQL> Oracle 9i之後
SQL> DD-MON-RR
SQL> */
SQL> --當前時間
SQL> select sysdate from dual;
SYSDATE
--------------
22-10月-12
SQL> --查詢系統參數
SQL> select * from v$nls_parameters;
PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE
NLS_TERRITORY
CHINA
NLS_CURRENCY
¥
PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_ISO_CURRENCY
CHINA
NLS_NUMERIC_CHARACTERS
.,
NLS_CALENDAR
GREGORIAN
PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_DATE_FORMAT
DD-MON-RR
NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE
NLS_CHARACTERSET
ZHS16GBK
PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_SORT
BINARY
NLS_TIME_FORMAT
HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM
PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY
¥
PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16
NLS_COMP
BINARY
NLS_LENGTH_SEMANTICS
BYTE
PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE
已選擇19行。
SQL> set linesize 150
SQL> col parameter for a 20
SP2-0246: 非法的 FORMAT 字符串"a"
SQL> col parameter for a20
SQL> select * from v$nls_parameters;
PARAMETER VALUE
-------------------- ----------------------------------------------------------------
NLS_LANGUAGE SIMPLIFIED CHINESE
NLS_TERRITORY CHINA
NLS_CURRENCY ¥
NLS_ISO_CURRENCY CHINA
NLS_NUMERIC_CHARACTE .,
RS
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
NLS_CHARACTERSET ZHS16GBK
PARAMETER VALUE
-------------------- ----------------------------------------------------------------
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FOR DD-MON-RR HH.MI.SSXFF AM TZR
MAT
NLS_DUAL_CURRENCY ¥
NLS_NCHAR_CHARACTERS AL16UTF16
ET
PARAMETER VALUE
-------------------- ----------------------------------------------------------------
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
已選擇19行。
SQL> col parameter for a30
SQL> host cls
SQL> select * from v$nls_parameters;
PARAMETER VALUE
------------------------------ ----------------------------------------------------------------
NLS_LANGUAGE SIMPLIFIED CHINESE
NLS_TERRITORY CHINA
NLS_CURRENCY ¥
NLS_ISO_CURRENCY CHINA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
NLS_CHARACTERSET ZHS16GBK
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
PARAMETER VALUE
------------------------------ ----------------------------------------------------------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY ¥
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
已選擇19行。
SQL> --v$nls_parameters 數據字典
SQL> --修改日期格式
SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
會話已更改。
SQL> select * from emp where hiredate='1981-11-17';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- ---------- ----- ---------- ----------
7839 KING PRESIDENT 1981-11-17 5000 10
SQL> alter session set NLS_DATE_FORMAT='DD-MON-RR';
會話已更改。
SQL> host cls
SQL> --between ..and 在。。。之間
SQL> --查詢薪水1000~2000的員工
SQL> select *
2 from emp
3 where sal between 1000 and 2000;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已選擇6行。
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* where sal between 2000 and 1000
SQL> /
未選定行
SQL> /*
SQL> 1. 含邊界
SQL> 2. 小值在前,大值在後
SQL> */
SQL> host cls
SQL> --in: 在集合中
SQL> --查詢10和20號部門的員工
SQL> select *
2 from emp
3 where deptno in (10,20);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已選擇8行。
SQL> --查詢不是10和20號部門的員工
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* where deptno not in (10,20)
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7900 JAMES CLERK 7698 03-12月-81 950 30
已選擇6行。
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* where deptno not in (10,20,null)
SQL> /
未選定行
SQL> --結論:如果集合中含義null值,不能使用not in操作符;但可以使用in
SQL> --問題? 原因是???
SQL> host cls
SQL> --like 模糊查詢 % _
SQL> --查詢名字以S打頭的員工信息
SQL> select *
2 from emp
3 where ename like 'S%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
SQL> --查詢名字是四個字的員工
SQL> select *
2 from emp
3 where ename like '____';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7839 KING PRESIDENT 17-11月-81 5000 10
7902 FORD ANALYST 7566 03-12月-81 3000 20
SQL> host cls
SQL> insert into emp
2 (empno,ename,sal,deptno)
3 values(1001,'Tom_123',2000,10);
已創建 1 行。
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
1001 Tom_123 2000 10
已選擇15行。
SQL> --查詢名字中含義下劃線的員工
SQL> select *
2 from emp
3 where ename like '%_%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
1001 Tom_123 2000 10
已選擇15行。
SQL> --使用轉義字符
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* where ename like '%\_%' escape '\'
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
1001 Tom_123 2000 10
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* where ename like '%a_%' escape 'a'
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
1001 Tom_123 2000 10
SQL> rollback;
回退已完成。
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已選擇14行。
SQL> host cls
SQL> --邏輯運算符
SQL> --and or
SQL> --SQL優化:2. 解析順序: 從右至左
SQL> host cls
SQL> --排序
SQL> --查詢員工信息,按照月薪排序
SQL> select *
2 from emp
3 order by sal;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7902 FORD ANALYST 7566 03-12月-81 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
已選擇14行。
SQL> --a命令 append
SQL> a desc
3* order by sal desc
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7839 KING PRESIDENT 17-11月-81 5000 10
7902 FORD ANALYST 7566 03-12月-81 3000 20
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7369 SMITH CLERK 7902 17-12月-80 800 20
已選擇14行。
SQL> host cls
SQL> --order by 後面 + 列名, 表達式, 別名, 序號
SQL> select ename,sal,comm,sal*12+nvl(comm,0)
2 from emp
3 order by sal*12+nvl(comm,0);
ENAME SAL COMM SAL*12+NVL(COMM,0)
-------- ----- ---------- ------------------
SMITH 800 9600
JAMES 950 11400
ADAMS 1100 13200
WARD 1250 500 15500
MILLER 1300 15600
MARTIN 1250 1400 16400
TURNER 1500 0 18000
ALLEN 1600 300 19500
CLARK 2450 29400
BLAKE 2850 34200
JONES 2975 35700
ENAME SAL COMM SAL*12+NVL(COMM,0)
-------- ----- ---------- ------------------
SCOTT 3000 36000
FORD 3000 36000
KING 5000 60000
已選擇14行。
SQL> ed
已寫入 file afiedt.buf
1 select ename,sal,comm,sal*12+nvl(comm,0) 年收入
2 from emp
3* order by 年收入
SQL> /
ENAME SAL COMM 年收入
-------- ----- ---------- ----------
SMITH 800 9600
JAMES 950 11400
ADAMS 1100 13200
WARD 1250 500 15500
MILLER 1300 15600
MARTIN 1250 1400 16400
TURNER 1500 0 18000
ALLEN 1600 300 19500
CLARK 2450 29400
BLAKE 2850 34200
JONES 2975 35700
ENAME SAL COMM 年收入
-------- ----- ---------- ----------
SCOTT 3000 36000
FORD 3000 36000
KING 5000 60000
已選擇14行。
SQL> ed
已寫入 file afiedt.buf
1 select ename,sal,comm,sal*12+nvl(comm,0) 年收入
2 from emp
3* order by 4
SQL> /
ENAME SAL COMM 年收入
-------- ----- ---------- ----------
SMITH 800 9600
JAMES 950 11400
ADAMS 1100 13200
WARD 1250 500 15500
MILLER 1300 15600
MARTIN 1250 1400 16400
TURNER 1500 0 18000
ALLEN 1600 300 19500
CLARK 2450 29400
BLAKE 2850 34200
JONES 2975 35700
ENAME SAL COMM 年收入
-------- ----- ---------- ----------
SCOTT 3000 36000
FORD 3000 36000
KING 5000 60000
已選擇14行。
SQL> ed
已寫入 file afiedt.buf
1 select ename,sal,comm,sal*12+nvl(comm,0) 年收入
2 from emp
3* order by 5
SQL> /
order by 5
*
第 3 行出現錯誤:
ORA-01785: ORDER BY 項必須是 SELECT-list 表達式的數目
SQL> host cls
SQL> --order by跟多列
SQL> select *
2 from emp
3 order by deptno,sal;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7839 KING PRESIDENT 17-11月-81 5000 10
7369 SMITH CLERK 7902 17-12月-80 800 20
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7902 FORD ANALYST 7566 03-12月-81 3000 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
已選擇14行。
SQL> --order by跟多列:作用於後面所有的列
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* order by deptno,sal desc
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7839 KING PRESIDENT 17-11月-81 5000 10
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7902 FORD ANALYST 7566 03-12月-81 3000 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7369 SMITH CLERK 7902 17-12月-80 800 20
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7900 JAMES CLERK 7698 03-12月-81 950 30
已選擇14行。
SQL> --desc離他最近的一列
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* order by deptno desc,sal desc
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7369 SMITH CLERK 7902 17-12月-80 800 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7839 KING PRESIDENT 17-11月-81 5000 10
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已選擇14行。
SQL> host cls
SQL> --查詢員工信息,按照獎金排序
SQL> select *
2 from emp
3 order by comm;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7369 SMITH CLERK 7902 17-12月-80 800 20
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
已選擇14行。
SQL> set pagesize 20
SQL> select *
2 from emp
3 order by comm;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7369 SMITH CLERK 7902 17-12月-80 800 20
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
已選擇14行。
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3* order by comm desc
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7902 FORD ANALYST 7566 03-12月-81 3000 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
已選擇14行。
SQL> ed
已寫入 file afiedt.buf
1 select *
2 from emp
3 order by comm desc
4* nulls last
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7369 SMITH CLERK 7902 17-12月-80 800 20
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
已選擇14行。
SQL> spool off