您的位置:首页 > 数据库 > Oracle

Oracle学习(2):过滤和排序

2015-05-29 17:00 609 查看

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语句中的列名的顺序值排序
•如果要按照多列进行排序,则规则是先按照第一列排序,如果相同,则按照第二列排序;以此类推
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: