• 1. ORACL深入浅出主讲人:邹振兴1深入浅出Oracle 主讲:邹振兴
  • 2. 前言Oracle数据是当前主流数据当中功能最强大,速度最快,市场占有率最高的一款产品。在工作中,使用频率非常高。 S1数据库主要学使用,S2数据库主要学业务逻辑,Y2数据库主要学习优化查询速度。 整个课程将分为二个部分,前4次课讲解Oracle数据库的基本应用(权限、建表、增、删、查、改),后4次课讲解Oracle的高级应用(事务、索引、视图、触发器、过程)。2深入浅出Oracle 主讲:邹振兴
  • 3. 第一章 了解ORACLE为什么要学习Oracle Oracle公司的基本介绍 如何安装Oracle Sqlplus工具的基本使用 Oracle用户\权限 管理3深入浅出Oracle 主讲:邹振兴
  • 4. 为什么学习Oracle通过www.51job.com的时实统计,国内IT届对oracle数据库人才的需求并不低于热门的Java 与 .Net。4深入浅出Oracle 主讲:邹振兴
  • 5. 为什么学习Oracle对于软件开发人员来说,熟悉Oracle或者熟练的使用Sql语句,对于就业来说,将非常有利。5深入浅出Oracle 主讲:邹振兴
  • 6. Oracle公司的基本介绍公司类型 上市公司 (NASDAQ: ORCL)   口号 Oracle is the information company   成立于 加利福尼亚 (1977年)   总部位于 美国加州红木滩市   重要人物 劳伦斯·埃里森 Lawrence (Larry) J. Ellison, 首席执行官   产业 数据库软件   雇员数目 35000+   Oracle的关系数据库是世界第一个支持SQL语言的数据库。1977年,Lawrence J.Ellison领着一些同事成立了Oracle公司,他们的成功强力反击了那些说关系数据库无法成功商业化的说法。现在,Oracle公司的财产净值已经由当初的2000美元增值到了现在的年收入超过97亿美元。 6深入浅出Oracle 主讲:邹振兴
  • 7. Oracle公司的基本介绍Oracle 公司年表 2008年 甲骨文公司(Oracle)宣布收购项目组合以及管理软件的供应商Primavera 软件公司。Primavera公司曾是世界上最大的独立项目协同管理及资源组合管理解决方案的供应商,在全球85个国家有450,000多用户,并在全球几十个国家设有代理商。   2009年 Sun与甲骨文两家公司20日宣布,双方已经达成协议,由甲骨文公司以每股9.5美元的价格收购Sun的普通股股权,全部交易将以现金完成。按此价格计算,此次甲骨文的收购总额为74亿美元,而除去Sun的现金及债务不计,该交易的净值为56亿美元。 7深入浅出Oracle 主讲:邹振兴
  • 8. Oracle公司的基本介绍Oracle市场份额   在2007年Oracle在数据库市场依然保持着强劲的势头,占据了数据库领域48.6%的市场份额。作为数据库软件市场的领跑者,Oracle数据库自去年推出了11g版本以来,在整个2008年最大的亮点是在9月下旬在旧金山举办的甲骨文全球大会上宣布了与云计算服务商展开更多的合作。同时在2008年OOW(Oracle Open World)上强势推出的跟HP合作的HP Oracle Exadata Storage Server也颇为引人瞩目,被称为“世界上最快的数据库机器”。 8深入浅出Oracle 主讲:邹振兴
  • 9. 如何安装OracleOracle安装图文介绍Windows下ORACLE 10g安装与操作图解 - junying2yu的专栏 - CSDN博客.htm 在安装Oracle过程中,Oracle将会创建3个默认的用户: sys:数据库管理员,具有最高权限。相当于 sqlserver 2005中的sa用户。 system:数据库操作员,具有较高权限。 scott:数据库演示员,用来演示示例数据库。9深入浅出Oracle 主讲:邹振兴
  • 10. 如何安装Oracle数据库安装完成之后,还必须启动服务。启动Oracle 必须启动如下二个服务: OracleOraDb10g_home1TNSListener 数据库监听器 OracleServiceORCL 数据库10深入浅出Oracle 主讲:邹振兴
  • 11. 如何安装OracleOracle与sqlserver 2005的区别 Oracle 是以用户为主线,而sqlserver 2005是以数据库为主线 Oracle 中每一个数据库都一个服务11深入浅出Oracle 主讲:邹振兴
  • 12. Oracle的联接配置tnsnames.oraOracle 客户端listener.oraOracle 服务器Oracle产品安装完成后,服务器和客户端都需要进行网络配置才能实现网络连接。 服务器端配置监听器,客户端配置网络服务名。12深入浅出Oracle 主讲:邹振兴
  • 13. Oracle的联接配置服务器端监听器配置信息包括监听协议、地址及其他相关信息。 配置信息保存在名为listener.ora的文件中。在安装服务器软件时自动配置一个监听器 客户端的网络服务名配置信息包括服务器地址、监听端口号和数据库SID等,与服务器的监听器建立连接。配置信息保存在名为tnsnames.ora的文件中 Oracle中的 Net Configuration Assistant和Net Manager工具都能用来配置监听器和网络服务名13深入浅出Oracle 主讲:邹振兴
  • 14. Sqlplus工具的基本使用Oracle客户端工具介绍 Sqlplus Oracle自带的客户端工具 Pl_sql 第三方厂商提供的客户端工具 其它第三方厂商提供的客户端工具 Sqlplus的启动方式 开始->启动-> sqlplusw 启动界面版sqlplus。 启动->启动-> sqlplus 启动命令行版sqlplus。14深入浅出Oracle 主讲:邹振兴
  • 15. Sqlplus工具的基本使用常用Oracle命令行 显示当前用户:show user; 断开连接命令:disc[onnect]; 连接数据库命令:conn[ect] + 连接字符串 连接字符串格式:conn 用户名/密码@网络服务名 [as sysdba/sysoper] 退出窗口:exit; 调用.sql文件命令:start ‘文件路径’ 编辑.sql脚本:edit ‘文件路径’ 15深入浅出Oracle 主讲:邹振兴
  • 16. Oracle用户\权限 管理Oracle用户管理 创建用户:create user 用户名 identified by 密码;密码必须字母开头 删除用户:drop user 用户名 [cascade]; 级联删除 修改密码:passw[ord] 锁定用户:alter user 用户名 account lock; 解锁用户:alter user 用户名 account unlock;16深入浅出Oracle 主讲:邹振兴
  • 17. Oracle用户\权限 管理Oracle 权限管理 新建用户没有任何权限,连登录数据库的权限都没有。只有system,sys 等具有dba权限的用户才能赋权限。 权限分类 系统权限:比如登录数据库,建表等。 对象权限:用户对其它用户的数据对象操作的权限。(select update delete insert all) 17深入浅出Oracle 主讲:邹振兴
  • 18. Oracle用户\权限 管理由于系统权限一种有140多种,管理起来不是很方便。系统将一些常用的权限组织在一起,就形成了角色。 角色又可以分为 预定义角色 和自定义角色,预定义角色是安装数据库后就已经存在的。 Connect 联接数据库角色 Dba 角色 Resource 角色 18深入浅出Oracle 主讲:邹振兴
  • 19. Oracle用户\权限 管理权限管理语法 赋予系统权限: grant 角色 to 用户; 赋予对象权限:Grant insert update delete select on 表 to 用户; 回收系统权限:revoke 角色 from 用户; 回收对象权限:revoke all on 表 from 用户; 19深入浅出Oracle 主讲:邹振兴
  • 20. 上机作业练习安装Oracle 10g数据库 使用sqlpuls连接到本地数据库 创建新用户 accp/accp。 修改accp用户密码为abc。 用新用户accp登录到本地数据库。 用新用户accp访问emp表。 编写查询emp表语句并保存到.sql脚本中。20深入浅出Oracle 主讲:邹振兴
  • 21. 上机作业回收accp用户权限。 在同学的数据库服务器上重复上述操作。 演示数据的导入导出功能。 导出语法:exp 用户名/密码@数据库 file = 路径 导入语法:imp 用户名/密码@数据库 file =路径 如果导出用户与导入用户不同,指定full = y参数即可导入。 如果导入用户中已存在表,则必须先删除表后才能导入。21深入浅出Oracle 主讲:邹振兴
  • 22. 第二章 Oracle数据管理上章回顾 Oracle表空间管理 Oracle表的管理 Oracle增、删、改数据 Oracle函数的使用22深入浅出Oracle 主讲:邹振兴
  • 23. 上章回顾提问: 启动Oracle数据库,必须启动那两个服务? 小明是一家公司的DBA,他给同事创建一个新用户后,同事发现自己不能登录数据库,请问这是为什么? 用户accp具有访问emp表的权限,小明编写如下语句 select * from emp;却发现语句报错,请问这是为什么?23深入浅出Oracle 主讲:邹振兴
  • 24. Oracle表空间管理什么是表空间? 表空间从物理上来说:是一些磁盘文件,用来存入表数据。 表空间从逻辑上来说:是将多张表有规律的组织起来,便于用户管理。 系统表空间 创建orcl数据库时,系统默认将orcl数据库分为了一些表空间。 System Temp Users等 系统表空间没有特殊意义24深入浅出Oracle 主讲:邹振兴
  • 25. Oracle表空间管理默认表空间 当创建一个用户时,可以指定用户默认表空间,也就是用户今后创建表等数据对象时,都会放在默认表空间中。 语法为:create user 用户名 identified by 密码 default tablespace 表空间表; 如果不指定默认表空间,则默认为System表空间。 为什么需要表空间? 第一、数据表非常多时,便于用户管理。 第二、数据量非常大时,便于将数据分布在不同的磁盘中。25深入浅出Oracle 主讲:邹振兴
  • 26. Oracle表空间管理创建表空间语法 create tablespace test --创建表空间 datafile ‘D:\oradata\orcl\test.dbf‘ --表空间文件 size 32m --初始大小 autoextend on --自动增长打开 next 32m maxsize 2048m --每次增长32 删除表空间语法 Drop tablespace test 注意:如果表空间中有表,则不能删除。删除表空间不会删除表空间物理文件。 第一次课\创建删除表空间.sql26深入浅出Oracle 主讲:邹振兴
  • 27. Oracle表的管理Oracle数据类型 Char 定长字符串 最大可以存放 2000字符 Varchar2(20) 变长字符串 最大可以4000字符 当字符长度确定时,一般使用char类型,char类型在于查询匹配时,速度比变长字符串快很多倍。原因讲解。 Number 数字类型 number(10,2)表示一共有10个位数,小数点后有2个位数。如果没有指定,则默认为4个位数。27深入浅出Oracle 主讲:邹振兴
  • 28. Oracle表的管理Oracle数据类型 Date 包含年月日和时分秒 Timestamp 这是oracle 9i对date类型的扩展 Clob字符型大对象 最大可以存放4G Blob 二进制数据,可以存放图片/声音 4G28深入浅出Oracle 主讲:邹振兴
  • 29. Oracle表的管理Oracle创建表 create table student( sid number(4), --学号 sname varchar2(20), --姓名 sex char(2), --性别 birthday date, --生日 sal number(7,2) --奖学金 ); 演示创建主键、非空、默认、检查、外键等约束。29深入浅出Oracle 主讲:邹振兴
  • 30. Oracle表的管理Oracle修改表 增加一列:alter table 表名 add (列名 类型); 修改字段的长度:alter table 表名 modify (列名 类型) 删除一列:alter table 表名 drop colnum 列 修改表的名字:rename 表名 to 表名 查看表结构:desc 表名;30深入浅出Oracle 主讲:邹振兴
  • 31. Oracle表的管理增加数据 单行数据增加 Insert into student values();注意日期格式的处理 Oracle中默认的日期格式为:DD-MM-YY 例如:01-5月-09 使用to_date函数转换日期类型。 多行增加语句 表复制语法:create table 目标表名 as select * from 源表名 疯狂复制法:insert into 表名 select * from 表名31深入浅出Oracle 主讲:邹振兴
  • 32. Oracle表的管理创建序列(自增长处理) create sequence myse increment by 1 --增长度 start with 1 --从哪里增加,就是说下一个获取的值从这个值开始 nomaxvalue --不设置最大值 对应的: maxvalue 30 演示使用序列32深入浅出Oracle 主讲:邹振兴
  • 33. Oracle表的管理修改数据(与sql server 2005一至) 单列修改 多列修改 把scott的岗位、工资、补助修改成与’smith’员工一样(oracle特点)33深入浅出Oracle 主讲:邹振兴
  • 34. Oracle表的管理删除数据 Delete from 表名; Trancate table 表名; 前者删除数据可以恢复,而后者不能恢复。 演示用rollback恢复数据。34深入浅出Oracle 主讲:邹振兴
  • 35. Oracle表的管理表数据操作注意 更改日期格式只做用于当前连接中。 增加数据语句后必须带上commit;否则不会真正提交到数据库中。(演示) 使用exit命令退出时,会自动提交语句。 点关闭按钮退出,不会提交语句。 解释Oracle连接原理。35深入浅出Oracle 主讲:邹振兴
  • 36. Oracle函数的使用日期函数 日期转换函数 to_date(‘日期’,格式)。举例:insert into student values(1,'小样',to_date('2009-01-01','yyyy-mm-dd')); Sysdate 当前日期和时间。举例:Select sysdate from dual; To_char(日期,日期部分)。举例: Last_day 本月最后一天。举例:  Select last_day(sysdate) from dual; Add_months(d,n) 当前日期d后推n个月。举例:Select add_months(sysdate,2) from dual; 更多内容函数\日期函数.doc36深入浅出Oracle 主讲:邹振兴
  • 37. Oracle函数的使用日期函数 查找已经入职8个月的员工 显示满10年服务年限的员工的姓名与受雇日期 对于每个员工,显示其加入公司的天数 找出各月倒数第3天受雇的所有员工37深入浅出Oracle 主讲:邹振兴
  • 38. Oracle函数的使用字符串函数使用 Lower(char):将字符串转化为小写的格式 Upper(char):将字符串转化为大写的格式 Length(char):返回符串的长度 Substr(char,m,n):取字符串的子串 将所有员工的名字按小写的方式显示 将所有员工的名按大写的方式显示 显示正好为5个字符的员工的姓名 显示所有员工姓名的前三个字符 以首字母大写的方式显示所有员工的姓名 以首字母小写的方式显示所有员工的姓名38深入浅出Oracle 主讲:邹振兴
  • 39. Oracle函数的使用字符串函数的使用 Replace(char1,目标子符串,替换字符串) Instr(char1,char2)取出子串在字符串中的位置 显示所有员工的姓名,用’小’替换所有的’A’39深入浅出Oracle 主讲:邹振兴
  • 40. Oracle函数的使用 函数 输入 输出Abs(n) Select abs(-15) from dual; 15Ceil(n) Select ceil(44.778) from dual; 45Cos(n) Select cos(180) from dual; -.5984601 Cosh(n) Select cosh(0) from dual; 1Floor(n) Select floor(100.2) from dual; 100Power(m,n) Select power(4,2) from dual; 16 Mod(m,n) Select mod(10,3) from dual; 1Round(m,n) Select round(100.256,2) from dual; 100.26 Trunc(m,n) Select trunc(100.256,2) from dual; 100.25 Sqrt(n) Select sqrt(4) from dual; 2 Sign(n)Select sign(-30) from dual;-140深入浅出Oracle 主讲:邹振兴
  • 41. 上机作业待定41深入浅出Oracle 主讲:邹振兴
  • 42. 第三章 Oracle数据查询回顾上一章内容 认识示例表 简单查询 高级查询42深入浅出Oracle 主讲:邹振兴
  • 43. 回顾上一章内容为什么Oracle中需要表空间? 小明向student表中加入一条数据,但小王查询student表时确没有看见。请问这是怎么回事? 小明不小心将一条重要的数据删除了,老板要开除小明。请问小明犯了什么错误,怎么样解决这个问题。43深入浅出Oracle 主讲:邹振兴
  • 44. 认识示例表认识emp表: empno 员工编号 ename 员工姓名 job 员工职位 mgr 员工的上级编号 hiredate 员工入职时间 sal 员工工资 comm 员工奖金 deptno 员工部门编号44深入浅出Oracle 主讲:邹振兴
  • 45. 认识示例表认识dept表: deptno: 部门编号 dname : 部门名称 loc : 部门地址 两表中英文单词解释 Clerk:职员 manager:经理 Salesman:销售 president:总经理 Analyst:分析人员 accounting:财务部 Research:研发中心 sales:销售部 45深入浅出Oracle 主讲:邹振兴
  • 46. 简单查询查看表结构语法: 示例 Desc dept; 查询所有列 示例 select * from emp; 查询指定列 示例 select ename from emp; 比较查询所有列与查询指定列的速度。 set timing on; --打开操作时间开关 46深入浅出Oracle 主讲:邹振兴
  • 47. 简单查询去掉重复行数 查询员工职位 示例:select distinct job from emp; 区分大小写 查询名称为smith 的职位,薪水,部门编号 47深入浅出Oracle 主讲:邹振兴
  • 48. 简单查询在oracle中使用算术表达式 显示每个员工的年工资 select sal * 12 as "年工资" from emp; 取别名与sql server 的区别 显示每个员工的年工资和奖金。 select (sal * 12) ,(comm * 12) from emp; 讲解结果与实现数据的区别,解释此原因。 显示每个员工的年工资与奖金的总额。 select (sal * 12) + (nvl(comm,0) * 12),ename from emp; 48深入浅出Oracle 主讲:邹振兴
  • 49. 简单查询在oracle中处理字符串连接的问题 select '姓名' || ename from emp; 使用where子句 显示工资高于3000的员工 显示1982.1.1后入职的员工 oracle默认日期格式为 '天-月-年‘ 显示工资在2000-2500的员工信息49深入浅出Oracle 主讲:邹振兴
  • 50. 简单查询如何使用like操作符 通配符的使用:% _ [] [^] 如何显示首字符为S的员工姓名和工资 如何显示第三个字符为大写O的所有员工的姓名与工资 在where条件使用in查询 显示empno为123,345,800 ...的员工情况50深入浅出Oracle 主讲:邹振兴
  • 51. 简单查询使用is null的操作符 显示没有上级的员工信息 使用逻辑操作符号 查询工资高于500或是岗位为manager的员工,同时还要满足他们的姓名首字母为大写J 使用order by 子句 按工资从低到高的顺序显示员工的信息 按部门号从高到低、工资从低到高排序51深入浅出Oracle 主讲:邹振兴
  • 52. 简单查询数据统计函数 max min avg sum count 显示所有员工中最高工资和最低工资 显示所有员工的平均工资和工资总和 计算共有多少员工 显示工资最高的员工的名字,工作岗位 显示工资高于平均工资的员工信息52深入浅出Oracle 主讲:邹振兴
  • 53. 简单查询groub by 和 having 子句 显示每个部门的平均工资和最高工资。 显示每个部门的每种岗位的平均工资和最低工资。 显示平均工资低于2000的部门号和它的平均工资。 分组 聚合小结 分组后,只能查询组名与对于此组的聚合数据 聚合函数忽略所有空值 聚合函数不能放在where条件中 聚合函数出现在列中,只能接聚合函数和组名53深入浅出Oracle 主讲:邹振兴
  • 54. 简单查询总结: 查询的语法总结54深入浅出Oracle 主讲:邹振兴
  • 55. 高级查询多表联查 显示员工名,员工工资及所在部门的名字 解释笛卡尔集 显示部门号为10的部门名、员工名和工资 显示各个员工的姓名,工资,及其工资的级别 在联接查询时可以使用between and 显示员工名,员工工资及所在部门的名字,并按部门排序55深入浅出Oracle 主讲:邹振兴
  • 56. 高级查询自连接 自己连自己,同一表进行联接查询 显示‘FORD’员工的上级领导的姓名 连接查询小结 连接查询其实就是笛卡尔集的应用56深入浅出Oracle 主讲:邹振兴
  • 57. 高级查询子查询(单行子查询) 显示与smith同一部门的所有员工 注意:数据库执行sql语句是从左到右的执行,所以应把过滤量大的条件放在sql语句的最左边。(性能提升) 子查询(多行子查询) 查询和部门10的工作相同的员工的名字、岗位、工资、部门号 查询工资比部门30的最大员工的工资高的员工姓名、工资和部门号 select * from emp where sal > all (select sal from emp where deptno = 30); select * from emp where sal > (select max(sal) from emp where deptno = 30); 查询工资比部门30的最小员工的工资高的员工姓、工资和部门号 select * from emp where sal > any (select sal from emp where deptno = 30); 57深入浅出Oracle 主讲:邹振兴
  • 58. 高级查询子查询(多列子查询) 查询与smith的部门和岗位完全相同的所有员工 select * from emp where (deptno,job) = (select deptno,job from emp where ename = 'SMITH'); 子查询(综合) 查询高于自己部门平均工资的员工的信息 select * from emp a1,(select avg(sal) avg,deptno from emp group by deptno) a2 where a1.deptno = a2.deptno and a1.sal > a2.avg; 当在form子句中使用子查询时,子查询会被当做临时表来看。 称之为内嵌临时表。必须指定别名。58深入浅出Oracle 主讲:邹振兴
  • 59. 高级查询子查应用(分页查询) 分解步骤: 一、select * from emp; 二、select emp.*,rownum from emp; 三、select emp.*,rownum from emp where rownum <= 10; 四、select * from (select emp.*,rownum rn from emp rownum <= 10) a1 where rn > 5; 注: 指定查询列,只需修改最内层的查询代码 如何指定排序,也只需修改最内层的查询代码 59深入浅出Oracle 主讲:邹振兴
  • 60. 高级查询联合查询 Union联合,不指定all时的联合 指定all关键字的联合60深入浅出Oracle 主讲:邹振兴
  • 61. 作业待定61深入浅出Oracle 主讲:邹振兴
  • 62. ORACL深入浅出主讲人:邹振兴62深入浅出Oracle 主讲:邹振兴