计算机实用技术(Part) 6.用开示例的表EM和DEPT 后面课程中在介绍SQL语句时所引用的都是以下两个表。 EMP表(14条记录),存放员工的基本信息 MPNO JOB MGR HIREDATE SAL COMMDEPTNO 7369SMITH 790217-Dec-80 1000 ALLEN SALESMAN 769820-Feb-81180303 7521 WARD SALESMAN 769822-Eeb-81 1450 500 7566JONES 783902-Apr-81 3175 7654MARTIN SALESMAN 769828-sep-8114501400 MANAGER 783901-May-813050 7782 CLARK MANAGER 783909-Jun-81 2650 7788SCOTT ANALYST 7566|09-Dec-823200 7839KING PRESIDENT 17-Nov-81 5200 10 7844TURNER SALESMAN 769808-8ep-81 1700 7900JAMES CLERK 769803-Dec-811150 7902FORD ANALYST 7566|03-Dec-81 3200 20 7934MILLER CLERK 8223-an-821500 DEPT表(4条记录),存放部门的信息 DEPTNO DNAME 10JACCOUNTING NEW YORK 20RE SEARCH DALLAS 30SALES CHICAGO OlOPERATIONS BOSTON 7.退出SqL*Pus 可以使用EXIT命令退出SQL*Plus。 SQL> EXIT 11
计算机实用技术(Part II) 6. 用于示例的表 (EMP和 DEPT) 后面课程中在介绍SQL语句时所引用的都是以下两个表。 EMP表(14条记录),存放员工的基本信息。 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 17-Dec-80 1000 20 7499 ALLEN SALESMAN 7698 20-Feb-81 1800 300 30 7521 WARD SALESMAN 7698 22-Feb-81 1450 500 30 7566 JONES MANAGER 7839 02-Apr-81 3175 20 7654 MARTIN SALESMAN 7698 28-Sep-81 1450 1400 30 7698 BLAKE MANAGER 7839 01-May-81 3050 30 7782 CLARK MANAGER 7839 09-Jun-81 2650 10 7788 SCOTT ANALYST 7566 09-Dec-82 3200 20 7839 KING PRESIDENT 17-Nov-81 5200 10 7844 TURNER SALESMAN 7698 08-Sep-81 1700 0 30 7876 ADAMS CLERK 7788 12-Jan-83 1300 20 7900 JAMES CLERK 7698 03-Dec-81 1150 30 7902 FORD ANALYST 7566 03-Dec-81 3200 20 7934 MILLER CLERK 7782 23-Jan-82 1500 10 DEPT表 (4条记录),存放部门的信息 DEPTNO DNAME LOC 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 7. 退出SQL*Plus 可以使用EXIT命令退出SQL*Plus。 SQL> EXIT - 11 -
计算机实用技术(Part) 8.基本的S语句 SQL> SELECT job, SUM(sal) PAYROLL 2 FROM emp 3 Where job NOT LIKE 'SALES% 4 GROUP BY job 5 HAVING SUM(sal)>5000 6 ORDER BY SUM(sal) SQL语句的简单规则 除非特别说明,SQL语句不区分大小写 SQL语句可以在一行或多行输入 键词不能跨行分开或缩写 为了方便阅读或编辑,语句通常被分为若干行 Tab和缩排用来增加代码的可读性 通常关键词用大写:其他的词,如表名和列名用小写 ·在SαL*Pus里,在SoL提示后输入第一条SL语句,而随后的行被编号。这叫做 SQL buffer. 无论何时在buer里当前的语句只有一条 在语句的结尾用分号()。 排除重复的行 SQL> SELECT DISTINCT deptno, job 2 FROM emp DEPTNO JOB CLERK MANAGER 10 PREs工DENT ANALYST 9 rows selected SQL和 SQL*Plus的比较 是一种语言,用来和服务器通信存取数据的识别SQL语句,并把它们发送给服务器 是建立在美国国家标准协会(ANS的标准SQL是 Oracle.了执行SQL语句提供的接口 可以操纵定义在数据库里的数据和基表 不允许操纵存储在数据库里的数据的值 可以输入一行或多行存储在 SQL buffer里 次只输入一行;不存储在 SQL buffer里 不能有连接符 如果命令超过一行可以用破折号(-)作为连接符 不能缩写 可以缩写 在使用终止符后将立刻执行 不需要终止符;命令会立刻执行 可以用函数来处理数据格式的工作 用命令来改变数据的格式
计算机实用技术(Part II) 8. 基本的SQL语句 SQL> SELECT job, SUM(sal) PAYROLL 2 FROM emp 3 WHERE job NOT LIKE 'SALES%' 4 GROUP BY job 5 HAVING SUM(sal)>5000 6 ORDER BY SUM(sal); SQL语句的简单规则 • 除非特别说明,SQL语句不区分大小写 • SQL语句可以在一行或多行输入 • 关键词不能跨行分开或缩写 • 为了方便阅读或编辑,语句通常被分为若干行 • Tab和缩排用来增加代码的可读性 • 通常关键词用大写;其他的词,如表名和列名用小写 • 在SQL*Plus里,在SQL提示后输入第一条SQL语句,而随后的行被编号。这叫做SQL buffer。 无论何时在buffer里当前的语句只有一条 • 在语句的结尾用分号(;)。 排除重复的行 SQL> SELECT DISTINCT deptno, job 2 FROM emp; DEPTNO JOB ------ --------- 10 CLERK 10 MANAGER 10 PRESIDENT 20 ANALYST ... 9 rows selected. SQL和SQL*Plus的比较 SQL SQL*Plus 是一种语言,用来和服务器通信存取数据的 识别SQL语句,并把它们发送给服务器 是建立在美国国家标准协会 (ANSI)的标准SQL 之上的 是Oracle为了执行SQL语句提供的接口 可以操纵定义在数据库里的数据和基表 不允许操纵存储在数据库里的数据的值 可以输入一行或多行存储在SQL buffer里 一次只输入一行;不存储在SQL buffer里 不能有连接符 如果命令超过一行可以用破折号(-)作为连接符 不能缩写 可以缩写 在使用终止符后将立刻执行 不需要终止符;命令会立刻执行 可以用函数来处理数据格式的工作 用命令来改变数据的格式 - 12 -
计算机实用技术(Part) 9. Where, Order by子句 S NULL操作 工 S NULL ENAME MGR TWEEN操作 3 WHERE sal BETWEEN 1000 AND 1500: MART工N 1250 ADAMS 1100 M工TLER 1300 N操作 mgr IN(7902,7566,7788) 7369 SMITH 800 7902 7788 7566 L|KE操作 SQL> SELECT ename ne LIKe A% I NOT操作 emp 3 Where job NOT IN ('CLERK','MANAGER,'ANALYST' ENAME JOB MART工N SALESMAN
计算机实用技术(Part II) 9. Where, Order by子句 IS NULL操作 SQL> SELECT ename, mgr 2 FROM emp 3 WHERE mgr IS NULL; ENAME MGR ---------- --------- KING BETWEEN操作 SQL> SELECT ename, sal 2 FROM emp 3 WHERE sal BETWEEN 1000 AND 1500; ENAME SAL ---------- --------- MARTIN 1250 TURNER 1500 WARD 1250 ADAMS 1100 MILLER 1300 IN操作 SQL> SELECT empno, ename, sal, mgr 2 FROM emp 3 WHERE mgr IN (7902, 7566, 7788); EMPNO ENAME SAL MGR --------- -------- -------- -------- 7902 FORD 3000 7566 7369 SMITH 800 7902 7788 SCOTT 3000 7566 7876 ADAMS 1100 7788 LIKE操作 SQL> SELECT ename 2 FROM emp 3 WHERE ename LIKE '_A%'; ENAME ---------- JAMES WARD NOT操作 SQL> SELECT ename, job 2 FROM emp 3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST'); ENAME JOB ---------- --------- KING PRESIDENT MARTIN SALESMAN - 13 -
计算机实用技术(Part) ALLEN SALESMAN URNER SALESMAN SALESMAN 按多列进行排序 SQL> SELECT ename, deptno, sal 2 FROM emp 3。 RDER BY deptno,sa⊥DEsc; DEPTNO KING 5000 10 2450 MILLER 20 3000 14 rows selected 10.SQL函数 单行函数 操纵数据项 受变量并返回一个值 对每一行的返回值起作用 每行返回一个结果 改变数据类型 能够被嵌套 函数 结果 LOWER(Oracle Education)oracle education UPPER(Oracle Education ORACLE EDUCATION INITCAP(ORACLE education) Oracle Education I CONCATCertified", 'DBA CertifiedDBA I SUBSTR(Administrator', 1, 5) Admin LENGTHC'Administrator' INSTR(Oracle,'c) LPAD(sal, 10, i* 率率率率率率5000 ROUND(78926,2) 7893 I TRUNC(8.926, 2) MOD(2100,500 100 SQL> SELECT The job title for 'l l INITCAP(e I I LOWER (ob)AS "EMPLOYEE DETAII FROM emp; EMPLOYEE DETA工Ls The job title for King is president The job title for Blake is manager The job title for Clark is manager 14 rows selected
计算机实用技术(Part II) ALLEN SALESMAN TURNER SALESMAN WARD SALESMAN 按多列进行排序 SQL> SELECT ename, deptno, sal 2 FROM emp 3 ORDER BY deptno, sal DESC; ENAME DEPTNO SAL ---------- --------- --------- KING 10 5000 CLARK 10 2450 MILLER 10 1300 FORD 20 3000 ... 14 rows selected. 10. SQL函数 单行函数 • 操纵数据项 • 接受变量并返回一个值 • 对每一行的返回值起作用 • 每行返回一个结果 • 改变数据类型 • 能够被嵌套 函数 结果 LOWER(‘Oracle Education’) oracle education UPPER(‘Oracle Education’) ORACLE EDUCATION INITCAP(‘ORACLE education’) Oracle Education CONCAT(‘Certified’, ‘DBA’) CertifiedDBA SUBSTR(‘Administrator’, 1, 5) Admin LENGTH(‘Administrator’) 13 INSTR(‘Oracle’, ‘c’) 4 LPAD(sal, 10, ‘*’) ******5000 ROUND(78.926, 2) 78.93 TRUNC(78.926, 2) 78.92 MOD(2100, 500) 100 SQL> SELECT 'The job title for '||INITCAP(ename)||' is ' 2 ||LOWER(job) AS "EMPLOYEE DETAILS" 3 FROM emp; EMPLOYEE DETAILS ----------------------------------------- The job title for King is president The job title for Blake is manager The job title for Clark is manager ... 14 rows selected. - 14 -
计算机实用技术(Part) Date函数 函数 结果 说明 MONTHS BETWEEN (OI-SEP-95, 11-JAN 196774194计算两个日期之间的月数 ADD MONTHS (I1-JAN-94, 6) I-JUL-94「计算指定日期后若干月的日期 NEXT DAY (O1-SEP-95, FRIDAY) 08SEP-95计算指定日期后下一天的日期 LAST DAYCOI-SEP-95) 30sEP95「计算指定月份最后一天的目期 ROUND(25-JUL-95, MONTH) 01AUG-95舍入日期 ROUNDC25-JUL-95 YEAR O1-JAN-96 TRUNC(25-JUL-95','MONTH) 01-JUL-95截取日期 TRUNC(25-JUL-95'YEAR') 01-JAN-95 SQL> SELECT empno, hiredate, 2 MONTHS BETWEEN (SYSDATE, hiredate) TENURE 3 ADD MONTHS (hiredate, 6)REVIEW 4 NEXT DAY (hiredate, 'FRIDAY ') LAST DAY (hiredate) 5 FROM emp 6 WHERE MONTHS BETWEEN (SYSDATE, hiredate)<200; EMPNO HIREDATE ENURE REV工EW NEXT DAY LAST DAY 783917-NoV-81192.2479417-MAY-8220-NOV-8130→NoV-81 769801-MAY-81198.7640701-NoV-8108-MAY-81 MAY-81 11 rows selected 带日期的 TO CHAR函数 要素 说明 LSO cc or cc 世纪;以S为前缀,用表示公元前的日期 Years in dates yYYy or sYYYy 以S为前缀,用-表示公元前的日期 YYY or YY or y 年的后3、2或1位数字 YYYY 在这个位置加逗号的年 LTYYY, IYY, IY, I 以ISO标准为基础的4,3,2,或1位数字的年 SYeAR or YEAR 完整拼写的年:以S为前缀,用表示公元前的日期 BC or Al 加上BCAD指示 B. C. or A D 加上带句点的BC/AD指示 四分之一年 2位数字的月 MONTH 「用9个字符长度(不够用空格填充)拼写的月 MON 以三个字母的缩写表示的月 马数字表示的月 年或月的星期 DDD or dd or d 年、月或星期的某日 用9个字符长度(不够用空格填充)拼写的目 以三个字母的缩写表示的日 侏略日:从公元前4713年12月31日开始计算 AM or PM 加上上下午指示 A Mor P.M. 加上带句点的上下午指示 HH or hh12 or Hh24 时、时(1-12)或时(0-23 分(0-59) 秒(0-59) SSSSS 午夜之后的秒数(0-86399
计算机实用技术(Part II) Date函数 函数 结果 说明 MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') 19.6774194 计算两个日期之间的月数 ADD_MONTHS ('11-JAN-94',6) '11-JUL-94' 计算指定日期后若干月的日期 NEXT_DAY ('01-SEP-95','FRIDAY') '08-SEP-95' 计算指定日期后下一天的日期 LAST_DAY('01-SEP-95') '30-SEP-95' 计算指定月份最后一天的日期 ROUND('25-JUL-95','MONTH') 01-AUG-95 舍入日期 ROUND('25-JUL-95','YEAR') 01-JAN-96 TRUNC('25-JUL-95','MONTH') 01-JUL-95 截取日期 TRUNC('25-JUL-95','YEAR') 01-JAN-95 SQL> SELECT empno, hiredate, 2 MONTHS_BETWEEN(SYSDATE, hiredate) TENURE, 3 ADD_MONTHS(hiredate, 6) REVIEW, 4 NEXT_DAY(hiredate, 'FRIDAY'), LAST_DAY(hiredate) 5 FROM emp 6 WHERE MONTHS_BETWEEN (SYSDATE, hiredate)<200; EMPNO HIREDATE TENURE REVIEW NEXT_DAY LAST_DAY --------- --------- --------- --------- --------- --------- 7839 17-NOV-81 192.24794 17-MAY-82 20-NOV-81 30-NOV-81 7698 01-MAY-81 198.76407 01-NOV-81 08-MAY-81 31-MAY-81 ... 11 rows selected. 带日期的TO_CHAR函数 要素 说明 SCC or CC 世纪;以S为前缀,用-表示公元前的日期 Years in dates YYYY or SYYYY 年;以S为前缀,用-表示公元前的日期 YYY or YY or Y 年的后3、2或1位数字 Y,YYY 在这个位置加逗号的年 IYYY, IYY, IY, I 以ISO标准为基础的 4, 3, 2, 或 1 位数字的年 SYEAR or YEAR 完整拼写的年;以S为前缀,用-表示公元前的日期 BC or AD 加上BC/AD指示 B.C. or A.D. 加上带句点的BC/AD指示 Q 四分之一年 MM 2位数字的月 MONTH 用9个字符长度(不够用空格填充)拼写的月 MON 以三个字母的缩写表示的月 RM 罗马数字表示的月 WW or W 年或月的星期 DDD or DD or D 年、月或星期的某日 DAY 用9个字符长度(不够用空格填充)拼写的日 DY 以三个字母的缩写表示的日 J 侏略日; 从公元前4713年12月31日开始计算 AM or PM 加上上下午指示 A.M. or P.M. 加上带句点的上下午指示 HH or HH12 or HH24 时、时 (1–12)或时(0–23) MI 分 (0–59) SS 秒 (0–59) SSSSS 午夜之后的秒数 (0–86399) - 15 -