计算机实用技术(Part) 序数(例如, DDTH for4TH) SP 完整拼写的数字(例如, DDSP for four) SPTH or THSP 完整拼写的序数(例如, DDSPTH for fourth) SQL> SELECT ename 2 TO CHAR (hiredate, 'fmDD Month YYYY) HIREDATE 17 November 1981 BLAKE 1May1981 2Apri11981 MART工N 28 September 1981 20 February 1981 14 rows selected SQL> SELECT ena TO CHAR (hiredate, 'fmDdspth "of" Month yYYY fmHH: MI SS AM) 3 HIREDATE 4 FROM mp i ENAME HIREDATE KING Seventeenth of November 1981 12: 00: 00 AM LAKE First of May 1981 12: 00: 00 AM 14 rows selected 带数字的 TO CHAR函数 匚要素 说明 例子结果 90$ 数字的位数(9的数目决定显示的宽度) 首位加零显示 01234 浮动的美元符号 s999999 1234 浮动的当地货币符号 L999999 FF1234 小数点的位置 99999123400 逗号的位置 999999 1,234 「M减号置于右边(负数 99「1234 PR 作为插入成分插入的负数 999999PR <1234> EEE科学计数法(格式必须是4个E 99999EEEE1.234E+03 10的n次幂(n=V后9的个数) 9999V99 123400 显示零值为空格,而不是0 B999999 1234.00 SQL> SELECT TO CHAR(sal,'$99, 999)SALARY FROM emp 3 WHERE ename I SCOTT SALARY 3,000
计算机实用技术(Part II) TH 序数(例如, DDTH for 4TH) SP 完整拼写的数字(例如, DDSP for FOUR) SPTH or THSP 完整拼写的序数(例如, DDSPTH for FOURTH) fm 清除空格或打头的零 SQL> SELECT ename, 2 TO_CHAR(hiredate, 'fmDD Month YYYY') HIREDATE 3 FROM emp; ENAME HIREDATE ---------- ----------------- KING 17 November 1981 BLAKE 1 May 1981 CLARK 9 June 1981 JONES 2 April 1981 MARTIN 28 September 1981 ALLEN 20 February 1981 ... 14 rows selected. SQL> SELECT ename, 2 TO_CHAR(hiredate, 'fmDdspth "of" Month YYYY fmHH:MI:SS AM') 3 HIREDATE 4 FROM emp; ENAME HIREDATE ---------- ------------------------------------------------ KING Seventeenth of November 1981 12:00:00 AM BLAKE First of May 1981 12:00:00 AM ... 14 rows selected. 带数字的TO_CHAR函数 要素 说明 例子 结果 9 数字的位数 (9的数目决定显示的宽度) 999999 1234 0 首位加零显示 099999 001234 $ 浮动的美元符号 $999999 $1234 L 浮动的当地货币符号 L999999 FF1234 . 小数点的位置 999999.99 1234.00 , 逗号的位置 999,999 1,234 MI 减号置于右边 (负数 999999MI 1234- PR 作为插入成分插入的负数 999999PR <1234> EEEE 科学计数法 (格式必须是4个E) 99.999EEEE 1.234E+03 V 10的n次幂 (n = V后9的个数) 9999V99 123400 B 显示零值为空格,而不是0 B9999.99 1234.00 SQL> SELECT TO_CHAR(sal,'$99,999') SALARY 2 FROM emp 3 WHERE ename = 'SCOTT'; SALARY -------- $3,000 - 16 -
计算机实用技术(Part) NVL函数 将空值转换为一个既定的值 数据类型可以是日期、字符和数字 数据类型一定要匹配 NVL(comm, O) NVL(hiredate, O1-JAN-97) ·NvL(job, No Job yet) SQL> SELECT ename, sal, comm, (sal*12)+comm 2 FROM emp ENAME (SAL*12)+COMM blAKE MANAGER CLARK MANAGER JONES MANAGER MARTIN SALESMAN 16400 14 rows selected SQL> SELECT ename, sal, comm, (sal*12)+NVL(comm, 0) 2 FROM emp ENAME SAL COMM (SAL*12)+NVL(COMM, 0) KING 5000 0000 2850 34200 CLARK 2450 JONES 2975 35700 MARTIN 1250 1400 16400 ALLEN 19500 14 rows selected DECODE函数 SQL> SELEcT job, sal, DECODE(j。b," ANALYST sAT★1.1 23456 ,SAL*1.15 ' MANAGER', SAL*1. 20 SAL) REVISED SALARY 7 FROM SAL REVISED SALARY PRESIDENT 5000 MANAGER 2850 3420 MANAGER 2450 2940 14r。 ws selected Nesting函数 SQL> SELECT ename 2 NVL(To CHAR (mgr),No Manager ' 3 FROM 4 WHERe mgr IS NULL
计算机实用技术(Part II) NVL函数 • 将空值转换为一个既定的值 • 数据类型可以是日期、字符和数字 • 数据类型一定要匹配 • NVL(comm,0) • NVL(hiredate,'01-JAN-97') • NVL(job,'No Job Yet') SQL> SELECT ename, sal, comm, (sal*12)+comm 2 FROM emp; ENAME JOB (SAL*12)+COMM ---------- --------- ------------- KING PRESIDENT BLAKE MANAGER CLARK MANAGER JONES MANAGER MARTIN SALESMAN 16400 ... 14 rows selected. SQL> SELECT ename, sal, comm, (sal*12)+NVL(comm,0) 2 FROM emp; ENAME SAL COMM (SAL*12)+NVL(COMM,0) ---------- --------- --------- -------------------- KING 5000 60000 BLAKE 2850 34200 CLARK 2450 29400 JONES 2975 35700 MARTIN 1250 1400 16400 ALLEN 1600 300 19500 ... 14 rows selected. DECODE函数 SQL> SELECT job, sal, 2 DECODE(job, 'ANALYST', SAL*1.1, 3 'CLERK', SAL*1.15, 4 'MANAGER', SAL*1.20, 5 SAL) 6 REVISED_SALARY 7 FROM emp; JOB SAL REVISED_SALARY --------- --------- -------------- PRESIDENT 5000 5000 MANAGER 2850 3420 MANAGER 2450 2940 ... 14 rows selected. Nesting函数 SQL> SELECT ename, 2 NVL(TO_CHAR(mgr),'No Manager') 3 FROM emp 4 WHERE mgr IS NULL; - 17 -
计算机实用技术(Part) ENAME NVL(TO CHAR(MGR),'NOMANAGER) KING No Manager 11.表的联接 等值联接 SQL> SELECT emp empno, emp ename, emp deptno 2 dept deptno, dept. lo 3 FROM 4 WHERe emp deptno=dept deptno; EMPNO ENAME DEPTNO DEPTNO LOC 7839KT 10 10 NEW 7698 BLAKE 30 30 CHIC 7782 CLARK 10 10 NEW 7566 JONES 20 20 DALLAS 14 rows selected 非等值联接 SALGRADE表 GRADE LOSAL HISAL 7001200 12011400 14012000 2001 300 3001 9999 SQL> SELECT e ename,e. sal, s grade emp e, saigrade s 3 WHERE e. sal 4 BETWEEN s.1。sa1ANDs.hisa1; ENAME SAL GRADE JAMES SMITH 1 ADAMS 1100 14r。 ws selected 外联接 SQL> SELECT eename, d deptno, d dname 2 FROM dept d 3 WHERE e deptno(+)=d deptno 4 ORDER BY e deptno ENAME DEPYNO DNAME 10 ACCOUNTING CLARK 10 ACCOUNTING 40 OPERATTONS
计算机实用技术(Part II) ENAME NVL(TO_CHAR(MGR),'NOMANAGER') ---------- ----------------------------- KING No Manager 11. 表的联接 等值联接 SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno; EMPNO ENAME DEPTNO DEPTNO LOC ----- ------ -------- ------ --------- 7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS ... 14 rows selected. 非等值联接 SALGRADE表 GRADE LOSAL HISAL ----- ----- ------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 SQL> SELECT e.ename, e.sal, s.grade 2 FROM emp e, salgrade s 3 WHERE e.sal 4 BETWEEN s.losal AND s.hisal; ENAME SAL GRADE ---------- --------- --------- JAMES 950 1 SMITH 800 1 ADAMS 1100 1 ... 14 rows selected. 外联接 SQL> SELECT e.ename, d.deptno, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno(+) = d.deptno 4 ORDER BY e.deptno; ENAME DEPTNO DNAME ---------- --------- ------------- KING 10 ACCOUNTING CLARK 10 ACCOUNTING ... 40 OPERATIONS - 18 -
计算机实用技术(Part) 15 rows selected 自联接 SQL> SELECT worker enamel works for 'l lmanager ename 2 FROM emp manager 3 WHERE worker. mgr manager empno ORKER. ENAMEII'WORKSFORI IMANAG BLAKE works for KING CLARK works for KING JONES works for KING 13 rows selected 使用表的别名 SQL> SELECT e empno, e ename,e deptno d deptno, d.loc 3 FROM emp e, dept d 4 WHERe e deptno=d deptno; 12.升组函数 分组函数的类型 函数 说明 AVG(IDISTINCTALL]n 计算n的平均值,忽略空值 统计行数,如果有表达式,则统计空值以外的行 COUNT(* DISTINCTALLI表达式}) 数。用*将选择统计所有的行,包括重复的和空 的行 MAX(IDISTINCTALLI表达式) 取表达式的最大值,忽略空值 MN( DISTINCTALLI表达式) STDDEV(DISTINCTALLJx) 计算n的均方差,忽略空值 SUM(IDISTINCTJALL]n) 计算n的和,忽略空值 VARIANCE(IDISTINCTALLIx) 计算n的方差,忽略空值 SQL> SELECT AVG(sal),MAX(sal) MIN (sal),SUM(sal) 4 Where job LIKE 'SALES%'i AVG (SAL) MAX(SAL) MIN (SAL) SUM(SAL 1400 1600 1250 5600 SQL> SELECT COUNT(*) 2 FROM emp 3 WHERE deptno 30 COUNT(*)
计算机实用技术(Part II) 15 rows selected. 自联接 SQL> SELECT worker.ename||' works for '||manager.ename 2 FROM emp worker, emp manager 3 WHERE worker.mgr = manager.empno; WORKER.ENAME||'WORKSFOR'||MANAG ------------------------------- BLAKE works for KING CLARK works for KING JONES works for KING MARTIN works for BLAKE ... 13 rows selected. 使用表的别名 SQL> SELECT e.empno, e.ename, e.deptno, 2 d.deptno, d.loc 3 FROM emp e, dept d 4 WHERE e.deptno=d.deptno; 12. 分组函数 分组函数的类型 函数 说明 AVG([DISTINCT|ALL]n) 计算n的平均值,忽略空值 COUNT({*|[DISTINCT|ALL]表达式}) 统计行数,如果有表达式,则统计空值以外的行 数。 用*将选择统计所有的行,包括重复的和空 的行。 MAX([DISTINCT|ALL] 表达式) 取表达式的最大值,忽略空值 MIN([DISTINCT|ALL] 表达式) 取表达式的最小值,忽略空值 STDDEV([DISTINCT|ALL]x) 计算n的均方差,忽略空值 SUM([DISTINCT|ALL]n) 计算n的和,忽略空值 VARIANCE([DISTINCT|ALL]x) 计算n的方差, 忽略空值 SQL> SELECT AVG(sal), MAX(sal), 2 MIN(sal), SUM(sal) 3 FROM emp 4 WHERE job LIKE 'SALES%'; AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) -------- --------- --------- --------- 1400 1600 1250 5600 SQL> SELECT COUNT(*) 2 FROM emp 3 WHERE deptno = 30; COUNT(*) --------- 6 - 19 -