程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle學習(2):過濾和排序

Oracle學習(2):過濾和排序

編輯:Oracle教程

Oracle學習(2):過濾和排序


Oracle的過濾與排序

where過濾語法

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> --查詢名叫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> --查詢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> select *
2 from emp
3 where ename='king;'
4 ;


未選定行 注意:若過濾字符串大小寫不相符合,則無法查詢出結果!



日期格式問題

SQL> --日期格式敏感
SQL> select *
2 from emp
3 where hiredate='17-11月-81'; (此為Oracle默認格式)


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> select sysdate from dual;


SYSDATE
--------------
25-3月 -12

查詢參數設置得到默認的日期格式

SQL> --查詢參數設置得到默認的日期格式
SQL> select *
2 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
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


PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE


已選擇19行。


更改會話中的默認日期格式(更改會話則恢復默認格式)

SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';


會話已更改。


SQL> select *
2 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 yyyy-mm-dd
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
NLS_CHARACTERSET ZHS16GBK
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_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY ¥
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY


PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE


已選擇19行。


SQL> select *
2 from emp
3 where hiredate='1981-11-17';


EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- ---------- ----- ---------- ----------
7839 KING PRESIDENT 1981-11-17 5000 10


SQL> select *
2 from emp
3 where hiredate='17-11月-81';
where hiredate='17-11月-81'
*
第 3 行出現錯誤:
ORA-01861: 文字與格式字符串不匹配




SQL> alter session set NLS_DATE_FORMAT='DD-MON-RR';


會話已更改。


SQL> host cls


between and 語法

SQL> --beween...and:包含邊界
SQL> --查詢月薪在1000~2000上的員工
SQL> --1. select * from emp where sal>=1000 and sal<=2000;
SQL> --2
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> --between..and:小值在前,大值在後
SQL> host cls


in語法

SQL> --in:在集合中
SQL> --查詢10,20號部門的員工
SQL> --1. select * from emp where deptno=10 or deptno=20;
SQL> --2.
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> 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行。


一個in的空值問題

SQL> ed
已寫入 file afiedt.buf


1 select *
2 from emp
3* where deptno not in (10,20,null)
SQL> /


未選定行


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> --查詢名字是4個字的員工
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> insert into emp(empno,ename,deptno) values(1001,'Tom_123',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
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 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
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 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 10


SQL> --轉意字符來取下劃線和百分號本身
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 10


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
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 10


已選擇15行。


SQL> rollback; (Oracle自動開啟事務)


回退已完成。


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
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


排序 order by

SQL> --排序order by
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
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行。

a命令 添加sql語句(a後面至少加2個空格)

SQL> --a命令:append
SQL> a desc
3* order by saldesc
SQL> /
order by saldesc
*
第 3 行出現錯誤:
ORA-00904: "SALDESC": 標識符無效 (不添加兩個以上空格則會失敗)




SQL> ed
已寫入 file afiedt.buf


1 select *
2 from emp
3* order by sal
SQL> /


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
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 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
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> --order by:列名 表達式 別名 序號
SQL> --按照年收入排序
SQL> select empno,ename,sal,comm,sal*12+nvl(comm,0)
2 from emp
3 order by sal*12+nvl(comm,0); (nvl為濾空函數 將comm為null的值轉化為0)


EMPNO ENAME SAL COMM SAL*12+NVL(COMM,0)
---------- -------- ----- ---------- ------------------
7369 SMITH 800 9600
7900 JAMES 950 11400
7876 ADAMS 1100 13200
7521 WARD 1250 500 15500
7934 MILLER 1300 15600
7654 MARTIN 1250 1400 16400
7844 TURNER 1500 0 18000
7499 ALLEN 1600 300 19500
7782 CLARK 2450 29400
7698 BLAKE 2850 34200
7566 JONES 2975 35700
7788 SCOTT 3000 36000
7902 FORD 3000 36000
7839 KING 5000 60000


已選擇14行。


SQL> ed
已寫入 file afiedt.buf


1 select empno,ename,sal,comm,sal*12+nvl(comm,0) 年收入 (加入別名)
2 from emp
3* order by 年收入
SQL> /


EMPNO ENAME SAL COMM 年收入
---------- -------- ----- ---------- ----------
7369 SMITH 800 9600
7900 JAMES 950 11400
7876 ADAMS 1100 13200
7521 WARD 1250 500 15500
7934 MILLER 1300 15600
7654 MARTIN 1250 1400 16400
7844 TURNER 1500 0 18000
7499 ALLEN 1600 300 19500
7782 CLARK 2450 29400
7698 BLAKE 2850 34200
7566 JONES 2975 35700
7788 SCOTT 3000 36000
7902 FORD 3000 36000
7839 KING 5000 60000


已選擇14行。


SQL> ed
已寫入 file afiedt.buf


1 select empno,ename,sal,comm,sal*12+nvl(comm,0) 年收入
2 from emp
3* order by 5 (按照第5列排序)
SQL> /


EMPNO ENAME SAL COMM 年收入
---------- -------- ----- ---------- ----------
7369 SMITH 800 9600
7900 JAMES 950 11400
7876 ADAMS 1100 13200
7521 WARD 1250 500 15500
7934 MILLER 1300 15600
7654 MARTIN 1250 1400 16400
7844 TURNER 1500 0 18000
7499 ALLEN 1600 300 19500
7782 CLARK 2450 29400
7698 BLAKE 2850 34200
7566 JONES 2975 35700
7788 SCOTT 3000 36000
7902 FORD 3000 36000
7839 KING 5000 60000


已選擇14行。


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
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> ed
已寫入 file afiedt.buf


1 select *
2 from emp
3* order by deptno,sal desc (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
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> ed
已寫入 file afiedt.buf


1 select *
2 from emp
3* order by deptno desc,sal desc (利用兩個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
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
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 (讓null排到下面)
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行。


注意事項(總結)

簡單總結

******************************************************************************************************************************
WHERE子句要緊隨FROM子句 ******************************************************************************************************************************
字符和日期要包含在單引號中。 字符大小寫敏感,日期格式敏感。 默認的日期格式是DD-MON-RR。

******************************************************************************************************************************
\

賦值使用:= 符號 (冒號+等號)

******************************************************************************************************************************

\



****************************************************************************************************************************** 使用LIKE運算選擇類似的值 選擇條件可以包含字符或數字: ?%代表零個或多個字符(任意個字符)。 ?_代表一個字符。 ‘%’和‘_’可以同時使用。
可以使用ESCAPE 標識符選擇‘%’和 ‘_’符號。 回避特殊符號的:使用轉義符。例如:將[%]轉為[\%]、[_]轉為[\_],然後再加上[ESCAPE ‘\’] 即可。 ******************************************************************************************************************************

使用 IS (NOT) NULL 判斷空值



******************************************************************************************************************************

邏輯運算符: \

這兒涉及到一個數據庫優化的問題:

因為and or 在Oracle中讀取順序是從右到左。所以(1)使用and語句時,把條件限制嚴格的(過濾的內容更多的)語句放在and右邊,這樣如果右邊語句被限制,則不需要在驗證左邊語句,提高了性能。(2)使用or時,則把條件限制松的(正確的可能性更大的)語句放在右邊,這樣如果右邊語句通過,則不需要在驗證左邊語句,提高了性能。
******************************************************************************************************************************

優先級





******************************************************************************************************************************

使用ORDERBY子句排序

?ASC(ascend): 升序 ?DESC(descend): 降序 ORDERBY子句在SELECT語句的結尾。
排序的規則 ?可以按照select語句中的列名排序 ?可以按照別名列名排序 ?可以按照select語句中的列名的順序值排序 ?如果要按照多列進行排序,則規則是先按照第一列排序,如果相同,則按照第二列排序;以此類推



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved