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