Oracle Day2 过滤、排序、单行函数
2016-03-16 09:17
706 查看
1.过滤和排序
2.单行函数
SQL> --查询10号部门的所有员工信息 SQL> select * 2 from emp 3 where empno = 10; 未选定行 SQL> ed SP2-0110: 无法创建保存文件 "afiedt.buf" SQL> 3 3* where empno = 10 SQL> c /empno/deptno; 3* where deptno = 10 SQL> / 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> set linesize 120l SP2-0268: linesize 选项的编号无效 SQL> set linesize 120; SQL> / 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> 3 3* where ename = 'KING' SQL> c /KING/King; 3* where ename = 'King' SQL> / 未选定行 SQL> --在oracle中字段的名称是不区分大小写的,但是字段里面的值是区分大小的 SQL> --查询入职日期是81-11-17号的员工信息 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> -- 在oracle中时间的表示格式是 DD-MON-RR SQL> select * from 2 emp 3 where hiredate = '1981-11-17'; where hiredate = '1981-11-17' * 第 3 行出现错误: ORA-01861: 文字与格式字符串不匹配 SQL> --查询oracle中的一般常量设置 SQL> select * from v$nls_paramters; select * from v$nls_paramters * 第 1 行出现错误: ORA-00942: 表或视图不存在 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 AL32UTF8 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 200; SQL> / 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 AL32UTF8 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> col parameter for a50; SQL> / 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 AL32UTF8 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> alter session set NLS_DATE_FORMAT = 'yyyy-mm-dd'; 会话已更改。 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> 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 yyyy-mm-dd NLS_DATE_LANGUAGE SIMPLIFIED CHINESE NLS_CHARACTERSET AL32UTF8 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> select * 2 from emp 3 where ename='KING' and job='PRESIDENT'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7839 KING PRESIDENT 1981-11-17 5000 10 SQL> --查询工资在2000-5000之间的所有员工 SQL> select * 2 from emp 3 where sal>2000 and sal < 5000; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7566 JONES MANAGER 7839 1981-04-02 2975 20 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7902 FORD ANALYST 7566 1981-12-03 3000 20 SQL> select * 2 from emp 3 where sal between 2000 and 5000; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7566 JONES MANAGER 7839 1981-04-02 2975 20 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING PRESIDENT 1981-11-17 5000 10 7902 FORD ANALYST 7566 1981-12-03 3000 20 已选择6行。 SQL> select * 2 from emp 3 where sal between 5000 and 2000; 未选定行 SQL> --between ...and 只能将小的写在前面大的写在后面 SQL> -- in/not in SQL> --查询20?30号部门的所有员工 SQL> select * 2 from emp 3 where deptno = 20 or deptno = 30; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 800 20 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7566 JONES MANAGER 7839 1981-04-02 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 7876 ADAMS CLERK 7788 1987-05-23 1100 20 7900 JAMES CLERK 7698 1981-12-03 950 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 已选择11行。 SQL> select * 2 from emp 3 where deptno in(20,30); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 800 20 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7566 JONES MANAGER 7839 1981-04-02 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 7876 ADAMS CLERK 7788 1987-05-23 1100 20 7900 JAMES CLERK 7698 1981-12-03 950 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 已选择11行。 SQL> -- 查询不在20和30号部门里面的所有员工 SQL> select * 2 from emp 3 where deptno != 20 and deptno != 30; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7839 KING PRESIDENT 1981-11-17 5000 10 7934 MILLER CLERK 7782 1982-01-23 1300 10 SQL> select * 2 from emp 3 where deptno not in(20,30); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7839 KING PRESIDENT 1981-11-17 5000 10 7934 MILLER CLERK 7782 1982-01-23 1300 10 SQL> -- 查询奖金为300和为空的所有员工信息 SQL> select * 2 from emp 3 where comm in(300,null); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 SQL> select * 2 from emp 3 where comm not in (300,null); 未选定行 SQL> -- in里面可以跟null,而not in 里面不能跟null SQL> -- 查询comm为空的所有员工信息 SQL> select * 2 from emp 3 where comm is null; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 800 20 7566 JONES MANAGER 7839 1981-04-02 2975 20 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING PRESIDENT 1981-11-17 5000 10 7876 ADAMS CLERK 7788 1987-05-23 1100 20 7900 JAMES CLERK 7698 1981-12-03 950 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 7934 MILLER CLERK 7782 1982-01-23 1300 10 已选择10行。 SQL> -- 模糊查询 SQL> -- 查询员工名字里面包含了O的所有员工信息 SQL> select * 2 from emp 3 where ename like '%O%'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7566 JONES MANAGER 7839 1981-04-02 2975 20 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7902 FORD ANALYST 7566 1981-12-03 3000 20 SQL> -- like 是一个关键字 表示模糊查询,其中的% 代表通配 SQL> -- 查询员工名字里面以K打头的员工信息 SQL> select * 2 from emp 3 where ename like 'K%'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7839 KING PRESIDENT 1981-11-17 5000 10 SQL> -- 查询ename的长度为4的所有员工信息 SQL> select * 2 from emp 3 where ename like '____'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7839 KING PRESIDENT 1981-11-17 5000 10 7902 FORD ANALYST 7566 1981-12-03 3000 20 SQL> -- 在oracle中_ 代表一个字符 SQL> insert into emp(empno,ename,sal,deptno) values(1001,'TOM_ab',50000,20); 已创建 1 行。 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 800 20 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7566 JONES MANAGER 7839 1981-04-02 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING PRESIDENT 1981-11-17 5000 10 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 7876 ADAMS CLERK 7788 1987-05-23 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 1981-12-03 950 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 7934 MILLER CLERK 7782 1982-01-23 1300 10 1001 TOM_ab 50000 20 已选择15行。 SQL> -- 查询ename字段里面包含了_的员工信息 SQL> select * 2 from emp 3 where ename like '%_%'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 800 20 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7566 JONES MANAGER 7839 1981-04-02 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING PRESIDENT 1981-11-17 5000 10 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 7876 ADAMS CLERK 7788 1987-05-23 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 1981-12-03 950 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 7934 MILLER CLERK 7782 1982-01-23 1300 10 1001 TOM_ab 50000 20 已选择15行。 SQL> -- oracle中的转义 SQL> select * 2 from emp 3 where ename like '%\_%' escape '\'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 1001 TOM_ab 50000 20 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 800 20 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7566 JONES MANAGER 7839 1981-04-02 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING PRESIDENT 1981-11-17 5000 10 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 7876 ADAMS CLERK 7788 1987-05-23 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 1981-12-03 950 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 7934 MILLER CLERK 7782 1982-01-23 1300 10 1001 TOM_ab 50000 20 已选择15行。 SQL> rollback; 回退已完成。 SQL> / 回退已完成。 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 800 20 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7566 JONES MANAGER 7839 1981-04-02 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING PRESIDENT 1981-11-17 5000 10 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 7876 ADAMS CLERK 7788 1987-05-23 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 1981-12-03 950 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 7934 MILLER CLERK 7782 1982-01-23 1300 10 已选择14行。 SQL> spool off;
SQL> /* SQL> sql 优化2: SQL> where条件优化: SQL> 执行的顺序是从右往左去执行 where deptno = 10 and ename like '%a%'; or SQL> */ SQL> -- 排序 order by SQL> -- 根据员工的sal 排序 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 23-5月 -87 1100 20 EMPNO ENAME JOB MGR HIREDATE ---------- -------------------- ------------------ ---------- -------------- SAL COMM DEPTNO ---------- ---------- ---------- 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 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 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 EMPNO ENAME JOB MGR HIREDATE ---------- -------------------- ------------------ ---------- -------------- SAL COMM DEPTNO ---------- ---------- ---------- 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 EMPNO ENAME JOB MGR HIREDATE ---------- -------------------- ------------------ ---------- -------------- SAL COMM DEPTNO ---------- ---------- ---------- 7902 FORD ANALYST 7566 03-12月-81 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 已选择14行。 SQL> set linesize 200; 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 23-5月 -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 19-4月 -87 3000 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 已选择14行。 SQL> --默认情况下oarcle是按照升序排列 SQL> select * 2 from emp 3 order by sal desc; 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 19-4月 -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 23-5月 -87 1100 20 7900 JAMES CLERK 7698 03-12月-81 950 30 7369 SMITH CLERK 7902 17-12月-80 800 20 已选择14行。 SQL> select * 2 from emp 3 order by sal asc; 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 23-5月 -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 19-4月 -87 3000 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 已选择14行。 SQL> -- desc 降序 asc升序 SQL> -- 按照sal和部门号排序 SQL> select * 2 from emp 3 order by sal,deptno; 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 23-5月 -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 19-4月 -87 3000 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 已选择14行。 SQL> select * 2 from emp 3 order by job,deptno; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- 7902 FORD ANALYST 7566 03-12月-81 3000 20 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7934 MILLER CLERK 7782 23-1月 -82 1300 10 7369 SMITH CLERK 7902 17-12月-80 800 20 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 7900 JAMES CLERK 7698 03-12月-81 950 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7839 KING PRESIDENT 17-11月-81 5000 10 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 已选择14行。 SQL> -- 如果排序后面跟了多个列,那么会首先使用第一列来排,第一列拍出来的,使用第二列来拍,以此类推。 SQL> -- order by 后面能跟什么东西? SQL> -- order by 列明,别名,表达式,列所在的数字顺序 SQL> select deptno,empno 员工号 2 from emp 3 order by 员工号; DEPTNO 员工号 ---------- ---------- 20 7369 30 7499 30 7521 20 7566 30 7654 30 7698 10 7782 20 7788 10 7839 30 7844 20 7876 DEPTNO 员工号 ---------- ---------- 30 7900 20 7902 10 7934 已选择14行。 SQL> select sal*12 基本工资 2 from emp 3 order by sal*12; 基本工资 ---------- 9600 11400 13200 15000 15000 15600 18000 19200 29400 34200 35700 基本工资 ---------- 36000 36000 60000 已选择14行。 SQL> select empno,deptno,sal*12 + nvl(comm,0) 2 from emp 3 order by 3; EMPNO DEPTNO SAL*12+NVL(COMM,0) ---------- ---------- ------------------ 7369 20 9600 7900 30 11400 7876 20 13200 7521 30 15500 7934 10 15600 7654 30 16400 7844 30 18000 7499 30 19500 7782 10 29400 7698 30 34200 7566 20 35700 EMPNO DEPTNO SAL*12+NVL(COMM,0) ---------- ---------- ------------------ 7788 20 36000 7902 20 36000 7839 10 60000 已选择14行。 SQL> select empno,deptno 2 from emp 3 order by empno,depton desc; order by empno,depton desc * 第 3 行出现错误: ORA-00904: "DEPTON": 标识符无效 SQL> 3 3* order by empno,depton desc SQL> c /depton/deptno; 3* order by empno,deptno desc SQL> / EMPNO DEPTNO ---------- ---------- 7369 20 7499 30 7521 30 7566 20 7654 30 7698 30 7782 10 7788 20 7839 10 7844 30 7876 20 EMPNO DEPTNO ---------- ---------- 7900 30 7902 20 7934 10 已选择14行。 SQL> select job,deptno 2 from emp 3 order by job,deptno desc; JOB DEPTNO ------------------ ---------- ANALYST 20 ANALYST 20 CLERK 30 CLERK 20 CLERK 20 CLERK 10 MANAGER 30 MANAGER 20 MANAGER 10 PRESIDENT 10 SALESMAN 30 JOB DEPTNO ------------------ ---------- SALESMAN 30 SALESMAN 30 SALESMAN 30 已选择14行。 SQL> -- desc只用用于理他最近的那一列 SQL> select empno,comm 2 from emp 3 order by comm desc; EMPNO COMM ---------- ---------- 7369 7782 7902 7900 7876 7566 7698 7934 7788 7839 7654 1400 EMPNO COMM ---------- ---------- 7521 500 7499 300 7844 0 已选择14行。 SQL> -- 在oracle中null最大 SQL> -- 让null在最后显示 SQL> select empno,comm 2 from emp 3 order by comm desc 4 nulls last; EMPNO COMM ---------- ---------- 7654 1400 7521 500 7499 300 7844 0 7788 7839 7876 7900 7902 7934 7698 EMPNO COMM ---------- ---------- 7566 7369 7782 已选择14行。 SQL> spool off;
2.单行函数
SQL> -- 大写 小写 首字母大写 SQL> select upper('hello world') 大写, lower('Hello World') 小写,initcap('hello world') 首字母大写 from dual; 大写 小写 首字母大写 ---------------------- ---------------------- ---------------------- HELLO WORLD hello world Hello World SQL> -- 字节和字符的统计 SQL> select length('中国') 字符,lengthb('中国') 字节 from dual; 字符 字节 ---------- ---------- 2 6 SQL> -- 替换字符串里面的o SQL> select replace('hello','o','a') from dual; REPLACE('H ---------- hella SQL> select replace('hello','o') from dual; REPLACE( -------- hell SQL> select lengthb(replace('hello','o')) from dual; LENGTHB(REPLACE('HELLO','O')) ----------------------------- 4 SQL> -- 截取字符串的子串 SQL> select substr('hello world',3) from dual; SUBSTR('HELLOWORLD ------------------ llo world SQL> select substr('hello world',3,4) from dual; SUBSTR(' -------- llo SQL> /* SQL> substr('',a) 从第a为开始截取到最后 SQL> substr('',a,b) 从第a位开始截取截取b个长度 SQL> */ SQL> -- 在一个字符串中查找某一个字符或者字符串 SQL> select instr('hello world','o') from dual; INSTR('HELLOWORLD','O') ----------------------- 5 SQL> select instr('hello world','hello') from dual; INSTR('HELLOWORLD','HELLO') --------------------------- 1 SQL> -- instr 查询第一次出现某一个字符或者字符串的位置 SQL> -- 左补齐和右补齐 SQL> select lpad('hello world',15,'*') 左补齐,rpad('hello world',15,'@') 右补齐 from dual; 左补齐 右补齐 ------------------------------ ------------------------------ ****hello world hello world@@@@ SQL> -- 去掉字符串里面的某一个字符或者子串 SQL> select trim('hello world','hel') from dual; select trim('hello world','hel') from dual * 第 1 行出现错误: ORA-00907: 缺失右括号 SQL> select trim('hel' from 'hello world') from dual; select trim('hel' from 'hello world') from dual * 第 1 行出现错误: ORA-30001: 截取集仅能有一个字符 SQL> select trim('h' from 'hello world') from dual; TRIM('H'FROM'HELLOWO -------------------- ello world SQL> -- trim只能去除一个字符,不能去除字符串 SQL> -- 数值函数 SQL> -- round 四舍五入 SQL> select round(42.965,2) 一,round(42.965,1) 二,round(42.965,0) 三, 2 round(42.965,-1) 四,round(42.965,-2) 五 from dual; 一 二 三 四 五 ---------- ---------- ---------- ---------- ---------- 42.97 43 43 40 0 SQL> select trunc(42.965,2) 一,trunc(42.965,1) 二,trunc(42.965,0) 三, 2 trunc(42.965,-1) 四,trunc(42.965,-2) 五 from dual; 一 二 三 四 五 ---------- ---------- ---------- ---------- ---------- 42.96 42.9 42 40 0 SQL> select mod(10,3) from dual; MOD(10,3) ---------- 1 SQL> select mod(3,10) from dual; MOD(3,10) ---------- 3 SQL> spool off
SQL> -- 查询系统当前时间 SQL> select sysdate from dual; SYSDATE -------------- 15-3月 -16 SQL> alter session set NLS_DATE_PARAMETER='yyyy-mm-dd'; alter session set NLS_DATE_PARAMETER='yyyy-mm-dd' * 第 1 行出现错误: ORA-00922: 选项缺失或无效 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 AL32UTF8 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 200; SQL> / 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 AL32UTF8 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> col parameter for a50; SQL> / 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 AL32UTF8 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> alter session set NLS_DATE_FORMAT='yyyy-mm-dd'; 会话已更改。 SQL> select sysdate from dual; SYSDATE ---------- 2016-03-15 SQL> -- 改变时间的显示的另一种方式 SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS' -------------------------------------- 2016-03-15 16:39:38 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> -- oracle中如果你的字符串的格式满足日期的格式系统会根据你的需求帮你转换 SQL> -- 输出昨天 ,今天 和明天 SQL> select sysdate + 1 明天,sysdate 今天, sysdate - 1 昨天 from dual; 明天 今天 昨天 ---------- ---------- ---------- 2016-03-16 2016-03-15 2016-03-14 SQL> -- 明天减去今天等于多少 SQL> select (sysdate + 1) - (sysdate) from dual; (SYSDATE+1)-(SYSDATE) --------------------- 1 SQL> -- 明天加今天等于多少 SQL> select (sydate + 1) + sysdate from dual; select (sydate + 1) + sysdate from dual * 第 1 行出现错误: ORA-00904: "SYDATE": 标识符无效 SQL> -- 日期不能去做加法,只能加几天,可以做减法,减去一个日期或者几天 SQL> -- 根据入司时间计算一下emp表里面的所有员工的工龄 SQL> select (sysdate - hiredate) 天,(sysdate -hiredate)/7 周, (sysdate - hiredate)/30 月 from emp; 天 周 月 ---------- ---------- ---------- 12872.7023 1838.95747 429.090077 12807.7023 1829.67176 426.92341 12805.7023 1829.38604 426.856743 12766.7023 1823.81461 425.556743 12587.7023 1798.24319 419.590077 12737.7023 1819.67176 424.590077 12698.7023 1814.10033 423.290077 10558.7023 1508.38604 351.956743 12537.7023 1791.10033 417.92341 12607.7023 1801.10033 420.256743 10524.7023 1503.5289 350.82341 天 周 月 ---------- ---------- ---------- 12521.7023 1788.81461 417.390077 12521.7023 1788.81461 417.390077 12470.7023 1781.5289 415.690077 已选择14行。 SQL> select (sysdate - hiredate)/30 粗略, months_between(sysdate,hiredate) 精确 from emp; 粗略 精确 ---------- ---------- 429.090142 422.958202 426.923475 420.861427 426.856808 420.796911 425.556808 419.442073 419.590142 413.603363 424.590142 418.474331 423.290142 417.216266 351.956808 346.893685 417.923475 411.958202 420.256808 414.248524 350.823475 345.764653 粗略 精确 ---------- ---------- 417.390142 411.409814 417.390142 411.409814 415.690142 409.764653 已选择14行。 SQL> -- 在一个日期上加上几个月 SQL> select add_months(sysdate,5) from dual; ADD_MONTHS ---------- 2016-08-15 SQL> -- 查看当前月的最后一天 SQL> select last_day(sysdate) from dual; LAST_DAY(S ---------- 2016-03-31 SQL> -- 下一个日期 比如下一个星期六 SQL> select next_day(sysdate,'星期二') from dual; NEXT_DAY(S ---------- 2016-03-22 SQL> -- 日期的四舍五入 SQL> select round(sysdate,'year') from dual; ROUND(SYSD ---------- 2016-01-01 SQL> select round(sysdate,'month') from dual; ROUND(SYSD ---------- 2016-03-01 SQL> select round(sysdate,'day') from dual; ROUND(SYSD ---------- 2016-03-13 SQL> select sysdate from dual; SYSDATE ---------- 2016-03-15 SQL> select trunc(sysdate,'day') from dual; TRUNC(SYSD ---------- 2016-03-13 SQL> -- 今天是星期二 天气真的很好 SQL> select to_char(sysdate,'"今天是"yyyy-mm-dd day "天气真的很好") from dual; ERROR: ORA-01756: 引号内的字符串没有正确结束 SQL> select to_char(sysdate,'"今天是"yyyy-mm-dd day "天气真的很好"') from dual; TO_CHAR(SYSDATE,'"今天是"YYYY-MM-DDDAY"天气真的很好"') ------------------------------------------------------------------------------------------------------ 今天是2016-03-15 星期二 天气真的很好 SQL> -- 双引号的作用除了作为别名以外还可以作为日期格式里面的常亮 SQL> --常量 SQL> -- 将整数转换为一个字符串 SQL> select to_char(1524251,L999,999) from dual; select to_char(1524251,L999,999) from dual * 第 1 行出现错误: ORA-00904: "L999": 标识符无效 SQL> select to_char(1524251,'L999,999') from dual; TO_CHAR(1524251,'L999,999') ------------------------------------ ################## SQL> select to_char(1524251,'L9,999,999') from dual; TO_CHAR(1524251,'L9,999,999') ---------------------------------------- ¥1,524,251 SQL> -- L 表示本地货比 SQL> select to_number('12345','99,99') from dual; select to_number('12345','99,99') from dual * 第 1 行出现错误: ORA-01722: 无效数字 SQL> select to_number('12345','99,999') from dual 2 ; select to_number('12345','99,999') from dual * 第 1 行出现错误: ORA-01722: 无效数字 SQL> select to_number('123') from dual; TO_NUMBER('123') ---------------- 123 SQL> -- 通用函数 SQL> -- nvl2 是nvl的一个加强版 SQL> -- nvl2(a,b,c) 如果a==null ,返回c否则返回b SQL> select sal,nvl2(comm,comm,sal) from emp; SAL NVL2(COMM,COMM,SAL) ---------- ------------------- 800 800 1600 300 1250 500 2975 2975 1250 1400 2850 2850 2450 2450 3000 3000 5000 5000 1500 0 1100 1100 SAL NVL2(COMM,COMM,SAL) ---------- ------------------- 950 950 3000 3000 1300 1300 已选择14行。 SQL> select sal,nvl2(comm,comm,sal), comm from emp; SAL NVL2(COMM,COMM,SAL) COMM ---------- ------------------- ---------- 800 800 1600 300 300 1250 500 500 2975 2975 1250 1400 1400 2850 2850 2450 2450 3000 3000 5000 5000 1500 0 0 1100 1100 SAL NVL2(COMM,COMM,SAL) COMM ---------- ------------------- ---------- 950 950 3000 3000 1300 1300 已选择14行。 SQL> -- nullif(a,b) 如果a == b 返回空,如果不等于返回a SQL> select nullif('abc','abc') from dual; NULLIF ------ SQL> select nullif('abc','abcc') from dual; NULLIF ------ abc SQL> -- coalesce(a,b,c....) 从最左边开始查找,查找到第一个不为空的返回 SQL> select sal, comm, coalesce(sal,comm,empno) from emp; SAL COMM COALESCE(SAL,COMM,EMPNO) ---------- ---------- ------------------------ 800 800 1600 300 1600 1250 500 1250 2975 2975 1250 1400 1250 2850 2850 2450 2450 3000 3000 5000 5000 1500 0 1500 1100 1100 SAL COMM COALESCE(SAL,COMM,EMPNO) ---------- ---------- ------------------------ 950 950 3000 3000 1300 1300 已选择14行。 SQL> select sal, comm, coalesce(comm,sal,empno) from emp; SAL COMM COALESCE(COMM,SAL,EMPNO) ---------- ---------- ------------------------ 800 800 1600 300 300 1250 500 500 2975 2975 1250 1400 1400 2850 2850 2450 2450 3000 3000 5000 5000 1500 0 0 1100 1100 SAL COMM COALESCE(COMM,SAL,EMPNO) ---------- ---------- ------------------------ 950 950 3000 3000 1300 1300 已选择14行。 SQL> -- case 和decode ,case是sql99标准里面的内容,decode只有在oracle中支持 SQL> select sal 调前, 2 case job 3 when 'PRESIDENT' then sal + 1000; when 'PRESIDENT' then sal + 1000 * 第 3 行出现错误: ORA-00905: 缺失关键字 SQL> when 'MANAGER' then sal + 800; SP2-0734: 未知的命令开头 "when 'MANA..." - 忽略了剩余的行。 SQL> sal + 400; SP2-0042: 未知命令 "sal + 400" - 其余行忽略。 SQL> end 涨后 from emp; SP2-0734: 未知的命令开头 "end 涨后 f..." - 忽略了剩余的行。 SQL> SQL> SQL> select sal 调前,case job when 'PRESIDENT' then sal + 1000;when 'MANAGER' then sal + 800;sal + 400;end 涨后 from emp; select sal 调前,case job when 'PRESIDENT' then sal + 1000;when 'MANAGER' then sal + 800;sal + 400;end 涨后 from emp * 第 1 行出现错误: ORA-00911: 无效字符 SQL> select sal, case 2 when job = 'PRESIDENT' then sal + 1000; when job = 'PRESIDENT' then sal + 1000 * 第 2 行出现错误: ORA-00905: 缺失关键字 SQL> select sal 调前,case job when 'PRESIDENT' then sal + 1000 when 'MANAGER' then sal + 800 sal + 400 end 涨后 from emp; select sal 调前,case job when 'PRESIDENT' then sal + 1000 when 'MANAGER' then sal + 800 sal + 400 end 涨后 from emp * 第 1 行出现错误: ORA-00905: 缺失关键字 SQL> SQL> select sal 调前,case when job = 'PRESIDENT' then sal + 1000 when job = 'MANAGER' then sal + 800 sal + 400 end 涨后 from emp; select sal 调前,case when job = 'PRESIDENT' then sal + 1000 when job = 'MANAGER' then sal + 800 sal + 400 end 涨后 from emp * 第 1 行出现错误: ORA-00905: 缺失关键字 SQL> select sal, case 2 when job = 'MANAGER' then sal + 800 3 end from emp; SAL CASEWHENJOB='MANAGER'THENSAL+800END ---------- ----------------------------------- 800 1600 1250 2975 3775 1250 2850 3650 2450 3250 3000 5000 1500 1100 SAL CASEWHENJOB='MANAGER'THENSAL+800END ---------- ----------------------------------- 950 3000 1300 已选择14行。 SQL> spool off;
相关文章推荐
- Oracle11g完全卸载与重装之后Enterprise Manager配置失败问题的解决
- 创建oracle用户
- UDI-01017: 操作产生了ORACLE 错误 01017
- 【翻译自mos文章】/dev/shm应该设置多大Oracle 实例启动时才能不报ORA-00845
- oracle 权限设置
- 主键/约束/事务/表关系 Oracle
- oracle操作命令大全
- 12c_Data redaction 数据编写策略
- Oracle AWR
- 读了oracle查询与优化做一些笔记,方便以后查看
- Android课程---Oracle VM VirtualBox出现不能为虚拟机打开一个新任务
- excel通过sqlldr导入到oracle数据库
- oracle Long数据类型总结
- oracle日志存放位置dump_dest
- oracle 学习笔记 number
- Oracle 存储过程遇到的问题
- Win7 下基于 Oracle VM VirtualBox 安装 Ubuntu desktop 12.04
- oracle 学习笔记 varchar2
- oracle应用dblink交换数据
- Oracle Day01 数据库基础