oracle数据库10G笔记_第1页
oracle数据库10G笔记_第2页
oracle数据库10G笔记_第3页
oracle数据库10G笔记_第4页
oracle数据库10G笔记_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Oracle10G数据库的简介核心知识:SQL语句(不同的数据库,命令不一样,但是,SQL语句一样)A. Oracle发展史(了解)a) 现在世界上最大的数据提供商,编程语言提供商,应用原件提供商,在数据库领域,等价于微软的存在b) Oracle 在古希腊神话中,是“神谕”的意思,指的是上帝的宠儿;在中国的商周时期,将刻在龟壳上的文字,称为上天的指示,现今被称为叫"甲骨文"c) Oracle 最早起源于IBM的以及技术人员发表的论文叫-“论关系型数据库的发展”;然后被oracle公司的老板Larry Ellison 所发现,进而有了oracle公司B. Oracle的版本问

2、题:Oracle版本简介大小Oracle8 / oracle 8i i是internet 表示oracle开始向网络发展,但是,8i只是一个过度的版本1CDOracle 9i是现在应用比较广泛的版本,可以说是8i的升级版本3CDOracle10G是一个过渡性的产品,G:表示网格计算;简单说就是将周边的区域以网格的方式进行划分,那么,在搜索数据的时候,会以就近方式进行快速搜索(博士课程)700+MOracle11G是一个完成的带有网格计算的新产品,已经投入数用1.8G1. oracle数据库的安装(必须会)1. 安装前的建议:关闭防火墙,断开互联网2. 安装文件:install文件夹下的 set

3、up.exe3. 启动安装程序4. 选择安装路径5. Next 下一步 然后 会显示当前 安装oracle数据库的版本,默认 ”企业版“即可6. Next 下一步 选择默认,下一步7. 看清楚:这里是当前全局数据库的名字与SID 一样的8. 同时:点选 然后 下一步a) 如果没有点选,那么在安装数据库的时候,不会有大数据用户的出现,这个事要做实验用的,必须要有;不选择,就一定没有9. 余下都是默认,直到此图的出现10. 点选“所有账户使用同一个口令” 统一使用“orcladmin”不要擅自更改,不要忘记,忘记了,谁也帮不了你11. 余下,next 下一步,到下面页面12. 选择“安装” 启动安

4、装程序,之后让其自行安装,并且不要做任何的操作,13. 也就是说:点击“安装”按纽是你在安结束装oracle数据库时的最后一个操作,其余所有操作,全部禁止2. Oracle10G 数据库的卸载和配置3. Oracle数据库的监听4. SqlPlus命令(重点)Oracle数据库操作住哟啊使用的是命令行方式,而所有的操作都是可以使用sqlplus来完成,可是对于sqlplus有2种形式:n 一种是dos风格的sqlplus;对应的命令式sqlplus.exen 一种是windows风格的,就是带窗口的sqlplus;对应命令sqlplusw.exe在oracle10G之中,2中,是没有什么区别的

5、,但是sqlplus.exe命令,在使用时,是不能自动换行的,所以,经常是用的是sqlplusw.exe。方便视觉效果,看着舒服。注意:这个命令,其本身,对编程是没有任何影响的。虽然sqlplus中也会出现折行的情况,但是,可以使用命令进行修改;还有折页效果,可以通过命令改变:n 设置每行显示的记录的长度:SET LINESIZE 300;/每行300列宽n 设置每页显示的记录的长度:SET PAGESIZE 30;/每页30条记录这2个命令,很多人叫做格式化命令,但是,这种格式化的命令在sqlplus下显示的不是很明显。注意:sqlplusw 本身,在窗口显示上,很舒服了,但是在程序的编辑上

6、不是很方便,因为,中间的命令行,一旦书写错误,没有办法使用“方向键”进行移动,在中间修改,必须将其后面的全部删除才可以进行修改在sqlplusw 中有ed 和 命令,可以进行记事本的调用和执行;使用ed,调用记事本程序: 键入:ed a此时会有提示,找不到a.sql文件,问是否创建;但是,使用ed命令打开记事本的时候,oracle中的sqlplusw窗口进入到“阻塞状态”,是不可操作,不可编辑的状态使用,执行记事本上的命令:a使用外部编译软件,编译sql的命令文件,然后,也是可以使用命令执行文本的,但是执行的命令,稍有不同 如果是一个后缀是.txt的文件,并且在硬盘上:那么必须写上完整的路径

7、D:/如果文件的后缀是.sql的,则不需要输入文件后缀:D:/ 或者键入 D:在一个数据库中,会有许多的用户,每个用户下面,有许多的数据表,查看这个用户下的表:SELECT * FROM tab;查看当前登陆的用户命令:SHOW user;如果用户输入错误,但是登陆成功了,那么也使可以使用sqlplusw来切换用户的,命令如下:“”可选择的操作 AS SYSDBA/SYSOPER 按照超级管理员/普通操作者方式登陆CONN 用户名/密码 AS SYSDBA/SYSOPER例如:CONN sys/orcl AS SYSDBA;一旦使用了sys登陆,则无法直接查看emp等表,因为emp不是sys用

8、下存储的表,要想访问emp表,则必须使用 scott.emp 的方式 表明访问的是scott这个用户下的emp表Sqlplusw 命令窗口也可以调用本机的操作系统命令,使用“host”作为命令前缀HOST COPY d: d:hello.txt;总结:(重点)1. oracle数据的安装和卸载2. Oracle数据库中的四个主要用户:·超级管理员: sys/change_on_install·普通管理员: system/manager·普通用户: scott/tiger·大数据用户:sh/sh ->这个是可以自定义2. slqplusw中的各种命令

9、3. 监听服务的问题5. 用户的表结构(重要)1.知识点1. SQL语法的基本格式、简单查询、限定查询、分组统计的使用;2. Scott用户下的主要的表的结构,需要记下3. 单行函数的使用2. 复习:a) SELECT * FROM tab;-查看当前用户下的表b) DESC table_name;-查查看表结构2. scott用户的表结构6. 简单查询(重点):1. 简单查询:查询一张表中的所有数据。2. 曾经使用过的查询语句a) SELECT * FROM emp;i. 这个语句主要指的是:从emp表中查询所有列的数据ii. * 占位符,代表emp表中所有的列名iii. 该语句属于SQL语

10、句的范围iv. SQL语句:SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。SQL通常用于数据库的通信,ANSI(美国国家标准学会)声明,SQL是关系数据库管理系统(RDBMS 指的是关系型数据库管理系统(Relationship Data Base Management System)的标准语言。v. Oracle是全世界最早使用SQL标准语句的数据库产品。vi. SQL功能强大,概括起来,它可以分为以下几组:· DML:数据库操作语言(Dat

11、a Manipulation Language)-用于检索或者修改数据(最主要的,面试,笔试,都会被考到)· DDL:数据库定义语言(Data Definition Language)-用于定义数据的结构,如创建、修改或者删除数据库对象· DCL:数据库控制语言(Data Control Language)-用于定义数据库用户的权限3. 语法结构:SELECT DISTINCT * | 字段 别名 ,字段 别名 FROM 表名称 别名范例:查询dept表的全部记录SELECT * FROM dept;范例:查询每个雇员的编号,姓名,基本工资·确定数据表的内容:em

12、p:编号,姓名,基本工资SELECT empno,ename,sal FROM emp;范例:查询出每个雇员的职位SELECT job FROM emp;有问题了,查询出的结果存在重复数据,主要原因是现在没有消除掉重复的记录, 可以使用DISTINCT消除掉重复的记录SELECT DISTINCT job FROM emp;a) 重复数据:指的是一行中的每个列的记录都重复,才叫重复数据范例:查询出每个雇员的姓名,职位SELECT ename,job FROM emp;b) 在进行简单查询的操作中,也可以使用各个数学的四则运算的操作符范例:显示每一个雇员的姓名、职位、基本年薪·需要的数

13、据表:emp·emp表要显示的列名称:姓名、职位、年薪=月薪*12SELECT ename,job,sal*12 FROM empc) 在上面的范例中,出现了“sal*12”显示的列,此列名不使用于显示列名,那么可以起一个别名。注意:别名不要使用中文,只要是程序的开发都要避免中文(包括数据库开发也是一样)SELECT ename,job,sal*12 sals FROM emp范例:公司有200元/月饭食补助和100元/月车费补助,请计算年薪·需要的数据表:emp·emp表要显示的列名称:姓名、职位、年薪=(月薪+200+100)*12SELECT ename,j

14、ob,(sal+300)*12 sals FROM emp范例:公司每年年底,都会多发放一个月的工资,作为年底奖金,计算年薪·需要的数据表:emp·emp表要显示的列名称:姓名、职位、年薪=(月薪+200+100)*12+salSELECT ename,job,(sal+300)*12+sal sals FROM empd) 在简单查询中,可是使用“|”连接符,来连接查询字段范例:试一试“|” 的使用SELECT empno | ename FROM emp;看着很讨厌的,改改SELECT empno | ' <=> ' | ename FROM

15、 emp;e) 由于“,”在数据库中属于原样输出的字符串,所以必须使用“'”单引号括起来f) 即:在SQL中,“'”单引号表示的是字符串范例:要求显示的数据按照如下格式显示:雇员编号是:7369的雇员姓名是:SMITH,基本工资是:800,职位是:CLERK!·使用的数据表:emp·需要显示的列名称:empno、ename、sal、job相当于查找:empno、ename、sal、job字段,并且使用“|”进行连接。 SELECT '雇员编号是:' | empno | '的雇员姓名是:' | ename | ',基本工

16、资是:' | sal | ',职位是:' | job | '!' FROM emp;i. 看着很表头长!,取个别名 SELECT '雇员编号是:' | empno | '的雇员姓名是:' | ename | ',基本工资是:' | sal | ',职位是:' | job | '!' 雇员信息 FROM emp;ii. 一定要记住,别名上的内容部要使用”'“括起来;只有在SELECT子句之中出现的内容,使用" ' "单引号。iii. 子句:1

17、. 理论上:SELECT 之后的语句叫SELECT子句,FROM 之后的子句叫FROM子句。这个只是习惯上的称呼,没有什么必然或者定义。7. 限定查询(重点)1. 复习上一堂课的内容:a) 在简单查询中,是将所有的记录进行显示,但是现在可以对显示的记录进行过滤的操作,那么就属于限定查询的范围了。2. 限定查询:就是在简单查询语法的基础上,增加了一个WHERE子句,用于指定限定条件。3. 语法结构:条件(condition)SELECT DISTINCT * 字段 别名 ,字段 别名 FROM 表名称 别名WHERE 条件(s)4. 在WHERE子句后可以增加多个条件,最长见的条件就是最基本的关

18、系运算:>、>=、<、<=、=、!=(<>)、BETWEEN AND、LIKE、IN、NULL、IS NULL、AND、 OR、NOT;8.1关系运算范例:查找基本工资高于1500的所有员工信息·需要的数据表:emp表·需要显示的列名称:emp表的所有信息·条件:sal >1500SELECT * FROM emp WHERE sal>1500;范例:查找职位是办事员的员工信息·需要的数据表:emp;·显示的列名称:emp下的所有列名称·条件:job='CLERK'SEL

19、ECT * FROM emp WHERE job='clerk'结果未选定行-没有返回相应的查询结果!原因:在Oracle数据库中,所有的数据都是区分大小写的,所以job='clerk'没有找到相应结果行所以代码修改如下:SELECT * FROM emp WHERE job='CLERK' 1. 以上是单个条件的,也可以同时满足多个条件2. 而多个条件之间可以使用AND 或者 OR 进行连接操作3. AND多和条件之间 全部满足 并列存在4. OR 多个条件之间 任意满足一个即可 任意其中一个范例:查询工资在1500-3000之间的全部员工信息

20、SELECT * FROM emp WHERE sal>=1500 AND sal=< 3000 ;范例:查询职位是办事员或者是销售人员的全部员工信息SELECT * FROM emp WHERE job='CLERK' OR job='SALESMAN'范例:查询职位是办事员或者是销售人员的全部员工信息并且工资大于1200·需要的数据表 emp·需要显示的列名称:*·限定条件: (job='CLERK' OR job='SALSMAN' ) AND sal>1200SELECT *

21、 FROM emp where (job='CLERK' OR job='SALESMAN') AND sal>1200注意:操作符号本身有优先级别,但是这些优先级,基本上是不会去背诵的,那么就使用“()”去改变运算有优先级别。范例:查询所有不是办事员的员工信息SELECT * FROM emp WHERE job <> 'CLERK' SELECT * FROM emp WHERE job != 'CLERK'SELECT * FROM emp WHERE NOT job = 'CLERK'8.

22、2范围操作符:BETWEEM.AND.1. “BETWEEM 最小值 AND 最大值”,表示的是一个范围之间的判断过程范例:查询工资在1500-3000之间的员工信息SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000;范例:上例相反操作SELECT * FROM emp WHERE sal NOT BETWEEN 1500 AND 3000;2. "BETWEEM AND "操作符不仅用于数据,对于日期也能用范例:·查询1981-01-01 1981-12-31这个时间段被雇佣的员工(雇用日期:hierdate)&#

23、183;hiredate字段上的内容可以使用字符串表示:dd-mm月-YYSELECT * FROM emp WHERE hierdate BETWEEN '01-1月-1981' AND '01-12月-81' 8.3 IS (NOT) NULL1. 判断是否为空2. 使用这个语法可以判断某个字段上的内容是否为"null"3. null 和 数字0 以及空字符串是两个概念。范例:查询所有领取奖金的员工信息SELECT * FROM emp WHERE comm IS NOT NULL;SELECT * FROM emp WHERE NOT

24、comm IS NULL;范例:查询不需要领取奖金的雇员SELECT * FROM emp WHERE comm IS NULL;8.4指定范围的操作:IN1. 表示的是一个查询的范围范例:查询雇员编号是7369、7566、7799的雇员信息·如果按照上面讲过的,要使用OR来链接SELECT * FROM emp WHERE empno=7369 OR empno=7566 OR empno=7799;·但是出现问题2条 7799不存在·如果使用IN操作符,代码简化了SELECT * FROM emp WHERE empno IN(7369 ,7566 ,7799

25、);·与上述效果一样,IN表示指定范围的2. NOT IN :表述不再指定的范围内SELECT * FROM emp WHERE empno NOT IN(7369 ,7566 ,7799);a) 注意:关于NOT IN的问题i. 如果使用IN操作符,查询的范围之中存在了null,是不影响查询的;范例如下:不影响查询结果SELECT * FROM emp WHERE empno IN(7369 ,7566 ,null);ii. 如果使用NOT IN 操作符,查询的范围之中存在了null,则不会有任何的查询结果返回;范例如下:SELECT * FROM emp WHERE empno

26、NOT IN(7369 ,7566 ,null);iii. NOT IN 中不能出现null,如果出现了null,则表示查询全部数据。8.5模糊查询:LIKE子句1. LIKE 子句的功能是提供模糊查询操作,例如:项目中的搜索操作,都数据LIKE子句的实现,但是必须注意,搜索引擎上的不是LIKE操作。2. LIKE搜索性能不高的情况下使用的3. 学习LIKE,必须学习的2个匹配符·匹配单个字符:_-> 1个·匹配任意多个字符:%-> 0个、1个、多个范例:查询雇员姓名中以字母C开头的全部雇员信息SELECT * FROM emp WHERE ename LIKE

27、 'C%' ;范例:查询雇员姓名中第二个字母是C的全部雇员信息SELECT * FROM emp WHERE ename LIKE '_C%' ;范例:查询雇员姓名中带有字母C的全部雇员信息SELECT * FROM emp WHERE ename LIKE '%C%' ;·在这里,也使可以使用NOT 求反操作的范例:查询雇员姓名中不带有字母C的全部雇员信息SELECT * FROM emp WHERE ename NOT LIKE '%C%' ;·LIKE子句,除了字符串,其他任意的数据,也是可以的。SELE

28、CT * FROM emp WHERE ename LIKE '%1%' OR hiredate LIKE '%1%' OR sal LIKE '%1%'·说明:LIKE子句的使用在开发之中,LIKE子句,是必用的,但是使用LIKE子句的时候,需要注意:如果在模糊查询上不设置任何的查询关键字的话('%'),则表示查询全部记录;这个特点,可以帮助我们在开发的时候,节省很多代码,必须牢记。8. 数据的排序 (重点)1. 当数据返回查询结果后,所有数据默认是按照雇员编号排序的2. 也可以使用"ORDER BY&quo

29、t;子句进行排序3. 语法如下:SELECT DISTINCT * 字段 别名 ,字段 别名 FROM 表名称 别名WHERE 条件(s) ORDER BY 字段 ASC | DESC , 字段 ASC | DESC . ;4. "ORDER BY"子句,是写在所有SQL语句的最后面的内容5. 对于排序的说明:a) 排序时,可以指定多个排序的字段;b) 排序的方式2种:i. ASC 升序 默认的ii. DESC 降序 用户需要指定序列,从大到小排序范例:查询所有雇员的信息,要求按工资排序SELECT * FROM emp ORDER BY sal ;SELECT * FRO

30、M emp ORDER BY sal ASC;范例:查询所有雇员的信息,要求按工资降序排序SELECT * FROM emp ORDER BY sal DESC;范例:查询所有雇员的信息,按工资由高到低排序,如果工资相同,则按照雇用日期由早到晚排序·此时需要两个字段排序:工资(DESC),雇用日期(ASC);SELECT * FROM emp ORDER BY sal DESC, hiredate ASC;·对于排序操作,只在需要的地方上使用。·"ORDER BY"子句是写在所有的SQL语句的最后的部分。9. 单行函数(重点) 10.1字符函数

31、在oracle中,即使要验证字符串,也必须编写完整的SQL语句,所以在ORACLE数据库中,为了简便用户查询,专门提供了一个“dual”虚拟表。1. UPPER(字符串|列):将输入的字符串变为大写返回;范例:试一试转换大写函数:SELECT UPPER('hello word') hi FROM dual;一般,在用户输入数据的时候,不会去关心数据本身是大写/小写。SQL> SELECT * FROM emp WHERE ename=UPPER('&str');输入 str 的值: smith原值 1: SELECT * FROM emp WHE

32、RE ename=UPPER('&str')新值 1: SELECT * FROM emp WHERE ename=UPPER('smith') EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO- - - - - - - - 7369 SMITH CLERK 7902 17-12月-80 800 20如果你输入的数据时小写的,则无法查出数据,所以这个时候不呢过对用户要求过多,但是可以由程序自己去适应,加入UPPER()函数即可。“&”,是sqlplus.exe中代替变量输入的内容,可以去看课件。2. LOW

33、ER(字符串|列):将输入的字符串变为小写返回;范例:将所有雇员姓名按小写返回SELECT LOWER(ename) ename FROM emp;3. INITCAP(字符串|列):将开头首字母大写;范例:将所有雇员姓名首字母大写SELECT INITCAP(ename) ename FROM emp;4. LENGTH(字符串|列):求字符串长度;范例:将所有雇员姓名的长度SELECT LENGTH(ename) ename FROM emp;范例:将所有姓名长度为5的所有雇员信息SELECT * FROM emp WHERE LENGTH(ename) = 5;5. REPLACE(字符

34、串|列):进行替换;范例:使用“_”替换名字中的所有“A”SELECT REPLACE(ename,'A','_') FROM emp ;6. SUBSTR(字符串|列,开始点,结束点):字符串截取;字符串截取操作有两种语法:1. 语法一:SUBSTR(字符串 | 列,开始点),表示从开始点一直截取到结尾;范例:SELECT ename,SUBSTR(ename,3) FROM emp;2. 语法二:SUBSTR(字符串 | 列,开始点,结束点),表示从开始点截取到结束点,截取部分内容;范例:SELECT ename,SUBSTR(ename,0,3) FROM

35、 emp;SELECT ename,SUBSTR(ename,1,3) FROM emp;范例:要求截取每个雇员姓名的后三个字母SELECT ename,SUBSTR(ename,LENGTH(ename)-2) FROM emp;·或者设置负数,表示从后指定截取位置SELECT ename,SUBSTR(ename,-3) FROM emp;面试题:问SUBSTR()函数截取的时候下标从0,还是1开始?·在ORACLE数据库中,SUBSTR()函数,从0或1开始,都是一样的;·SUBSTR()函数也可以设置负数,表示由后指定截取的开始点。10.2数字函数1、 数

36、字函数一共有3个:i. ROUND(数字 | 列 ,保留小数的位数):四舍五入的操作;ii. TRUNC(数字 | 列 ,保留小数的位数):舍弃指定位置的内容;iii. MOD(数字1,数字2):取模,取余数;范例:验证ROUND()函数SELECT ROUND(805.53567),ROUND(-805.53567),ROUND(-805.53567,2) ,ROUND(805.53567,-1) FROM dual;范例:验证TRUNC()函数-截取小数点后面所有的位数SELECT TRUNC(805.53567),TRUNC(-805.53567),TRUNC(-805.53567,2)

37、,TRUNC(805.53567,-1) FROM dual;范例:验证MOD()函数SELECT MOD(10,3) FROM dual;10.3日期函数1. 学习日期,首先要解决的问题是获取当前的日期,可以使用"SYSDATE";代码如下:SELECT SYSDATE FROM dual;2. 除了获取当前日期外,在日期中,也可以进行若干的运算:·日期 + 数字 = 日期,表示若干天之后的日期SELECT SYSDATE + 3,SYSDATE + 300 FROM dual;·日期 - 数字 = 日期,表示若干天之前的日期SELECT SYSDAT

38、E - 3,SYSDATE - 300 FROM dual;·日期 - 日期 = 数字,表示两个日期间天数,但必须是大日期 - 小日期范例:求出每个雇员到今天为止雇佣的天数SELECT ename,hiredate,SYSDATE-hiredate FROM emp;注意:上述公式只有3个,没有 日期+日期,它没有代表意义,什么都不是3. 除了上述三个公式外,oracle提供了4个操作函数·LAST_DAY(日期):求出指定日期的最后一天范例:求出本月最后一天的日期SELECT LAST_DAY(SYSDATE) FROM dual;·NEXT_DAY(日期,星期

39、数):求出下一个指定星期X的日期范例:下一个星期一是几号?SELECT NEXT_DAY(SYSDATE,'星期一') d FROM dual;范例:下一个星期二是几号?SELECT NEXT_DAY(SYSDATE,'星期二') d FROM dual;·ADD_MONTHS(日期,数字):求出若干月之后的日期;数字表示的是月;范例:计算出在座各位最晚毕业时间(即找工作的时间)SELECT ADD_MONTHS('11-6月-12',2) d FROM dual;·MONTHS_BETWEEN(日期1,日期2):求出两个日期

40、之间所经过的月份4. 范例:计算每个雇员,到今天为止的雇佣月份SELECT ename,hiredate,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate) dates FROM emp;5. 在所有的开发中,如果是日期的操作,建议使用以上的函数,因为这些函数可以避免闰年的问题。10.4转换函数(重点-核心)1. 在oracle数据库中常用的三种数据:a) ·数字(NUMBER)b) ·字符串(VARVHAR2)c) ·日期(DATE)2. 转换函数的主要功能是:完成上述三种数据之间的相互转换的操作3. 一共有三种转换函数:·T

41、O_CHAR(字符串 | 列,格式字符串):将日期或者数字变为字符串显示·TO_DATE(字符串,格式字符串):将字符串变为DATE显示·TO_NUMBER(字符串):将字符串变为数字显示a) TO_CHAR()函数范例:使用SYSDATE()显示当前系统时间SELECT SYSDATE FROM dual;这个在oracle数据库中是以“日-月-年”的格式显示的,这个种格式不适用于开发和中国人的想法。这种情况下,可以使用TO_CHAR()函数,但是使用此函数需要一些格式字符串:年(yyyy),月(mm),日(dd)。范例:使用SYSDATE()显示当前系统时间,格式:“年

42、-月-日”SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd') FROM dual;SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd'),TO_CHAR(SYSDATE,'yyyy') y,TO_CHAR(SYSDATE,'mm') m ,TO_CHAR(SYSDATE,'dd') d FROM dual;·问题:在这个时候,会有前导“0”的出现,即03 02 诸如此类·消除0的做法是加入fm,正常是加“0”的SELECT TO_CHAR(SYSDATE,

43、'fmyyyy-mm-dd') FROM dual;·在DATE中,是包含时间的但是,之前的代码没有显示时间,加入时间,就需要增加标记:时(hh),分(mi),秒(ss)SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh:mi:ss') FROM dual;问题:显示结果是:2012-03-02 03:20:24 十二小时制的,在hh后添加24即可SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM dual;·使用了TO_CHAR()函数后,所有的内

44、容都是字符串不再是DATE行数据了·TO_CHAR()函数也可用于数字的格式化上:此时你遇到的每一个“9”表示一位数字的概念,而不是数字9的概念。SELECT TO_CHAR(858,'999,999,999,999,999,999') nums FROM dual;·实现效果nums- 85,098,654,132,168如果要在数字前面显示货币,那么在形如'999,999,999,999,999,999'前,添加L.L表示Local的含义,表示当前系统语言环境的货币符号。b) TO_DATE()函数·此函数的主要功能是将一个字符

45、串变为DATE型数据。范例:将字符串'1983-04-07'使用TO_DATE()函数,转换成DATE类型数据SELECT TO_DATE('1983-04-07','yyyy-mm-dd') FROM dual;一般此函数,在更新数据库的时候,使用很多c) TO_NUMBER()函数将字符串转换成数字,现在使用较少了范例:将字符串'1'使用TO_NUMBER函数,转换成DATE类型数据SELECT TO_NUMBER('1') FROM dual;SELECT TO_NUMBER('1') + T

46、O_NUMBER('5') FROM dual;在oracle中,以上的功能不使用TO_NUMBER()函数,也可以完成,所以基本上TO_NUMBER()函数已经是不考虑了10.5通用函数(重点-核心)通用函数主要有两个:NVL()、DECODE()是oracle的特性函数;1. NVL()函数,是处理null的范例:查询每个雇员的全部年薪SELECT ename,sal,comm,(sal+comm)*12 FROM emp;此时,会有null字段出现,原因在于COMM 提成字段上为null,要解决,就必须使用NVL()函数进行处理:将null 变为0;以上就是NVL()函数

47、的作用。SELECT ename,sal,comm,(sal+comm)*12,NVL(comm,0) FROM emp;SELECT ename,sal,comm,(sal+NVL(comm,0)*12,NVL(comm,0) FROM emp;2. DECODE()函数:多数值判断相当于之前java中的if.else.语句,唯一不同的是DECODE()函数判断的是数值,而不是逻辑判断范例:查询全部雇员的职位,但是这些职位要求替换中文显示·CLERK 办事员·SALESMAN 销售员·MANAGER 经理·ANALYST 分析员·PRESID

48、ENT 总裁以上显示的数据,一定是逐行显示的,所以这个时候就必须采取DECODE()函数,函数语法如下:DECODE(数值 | 列,判断值1,显示值1,判断值2,显示值2,判断值3,显示值3,。)实现上面范例代码如下:SELECT empno,ename,job, DECODE(job,'CLERK','办事员','SALESMAN','销售员') FROM emp;DECODE()函数,在oracle中很具有特点的函数,是一定要会的10. 习题 1. 选择部门30中的所有员工2. 列出所有办事员(CLERK)的姓名,编号和部门编

49、号3. 找出佣金高于薪金的雇员4. 找出佣金高于薪金60%的雇员5. 找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。6. 找出部门10中所有经理MANAGER,部门20中所有办事员CLERK,既不是经理又不是办事员但其薪金大于或等于2000的所有雇员的详细信息7. 找出收取佣金的员工的不同工作8. 找出不收取佣金或后去的佣金低于100的员工9. 找出各月倒数第3天受雇的所有员工10. 找出早于12年前受雇的员工11. 以首字母大写的方式显示所有员工的姓名12. 显示正好为5个字符的员工的姓名13. 显示不带有“R”的员工姓名14. 显示所有员工姓名的前

50、三个字符15. 显示所有与昂的姓名,用“a”替换所有“A”16. 显示满10年服务年限的员工的姓名和受雇日期17. 显示员工的详细资料,按姓名排序18. 显示所有员工姓名和受雇日期,根据其服务年限,将最老的员工排在前面19. 显示所有员工的姓名、工作和薪金,按工作的降序排列,若工作相同则按薪金排序20. 显示左右雇员姓名、加入公司的年份和月份,按受雇日期所在月份排序,若月份相同则将最早的员工排在最前面21. 显示在一个月为30填的情况下所有雇员的日薪资,忽略余数22. 找出在(任何年份的)2月受聘的所有雇员23. 计算每个雇员加入公司的天数24. 显示姓名字段的任何位置包含“A”的所有雇员姓名

51、25. 以年月日的方式显示所有雇员的服务年限 第一步:求出每个雇员的雇佣年数:被雇佣的总月数/12=年数;第二步:求出月数,以上计算之中被忽略的小数点实际上都是月份,所以直接取余即可第三步:求出天数,最准确的做法是在不超过30天的范围之内求; 现在已经知道当前的时间使用SYSDATE取出,而雇佣的日期使用hiredate取出,可是hiredate和SYSDATE 之间的差距太大了,所以肯定会有误差,那么就必须想办法将hiredate的日期提升到与SYSDATE差距在30天的范围之内。 在之前学习过两个函数: ·MONTHS_BETWEEN():求出两个日期间的月数,如果是:MONTH

52、S_BETWEEN(SYSDATE,hiredate)求出的是雇佣日期到今天为止的雇佣月份; ·ADD_MONTHS():在一个日期上加入指定的月之后的日期,如果说hiredate+与今天相距的月数 = 一个新的日期,而且这个新的日期肯定和SYSDATE相距不超过30天。以上的这道程序,属于日期函数的综合应用,本身已经超过了SQL的掌握程度,知道就行了,如果真遇到了这种问题,也轮不到你解决。11. 多表查询(重点)12.1多表查询的介绍12.2多表查询的基本概念 ·一条SQL语句,从一张表中查询出所需要的内容,叫单表查询。·一条SQL语句,从多张表中查询出所需要的

53、内容,叫多表查询。·多表查询语法如下SELECT DISTINCT * 字段 别名 ,字段 别名 FROM 表名称 别名 ,表名称 别名 ,.WHERE 条件(s) 范例:查询雇员表和部门表中的总记录数·可以使用COUNT()函数完成SELECT COUNT(*) FROM emp; -14条记录SELECT COUNT(*) FROM dept;-4条记录注意问题:·SELECT * FROM 表名;以后是不可以这样写的原因:1. 语句简单,书写方便,属于新人做法(没有任何开发经验的人)2. 如果数据量较大的话,浏览器无法浏览数据,切可能会造成系统死机·SELECT COUNT(*) FROM 表名原因:1. 语句简单,书写方便,有经验的人会做的事情2. 如果数据量较小则可以查询全部数据,如果数据量较大,则不能直接使用SELECT语

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论