oracle的体系很庞大,要学习它,首先要了解oracle的框架。
1、物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成)
控制文件:包含维护和验证数据库完整性的必要信息、例如,控制文件用于识别数据文件和重做日志文件,一个数据库至少需要一个控制文件
数据文件:存储数据的文件
重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件
参数文件:定义Oracle例程的特性,例如它包含调整SGA中一些内存结构大小的参数
归档文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
密码文件:认证哪些用户有权限启动和关闭Oracle例程
2、逻辑结构(表空间、段、区、块)
表空间:是数据库中的基本逻辑结构,一系列数据文件的集合。
段:是对象在数据库中占用的空间
区:是为数据一次性预留的一个较大的存储空间
块:ORACLE最基本的存储单位,在建立数据库的时候指定
3、内存分配(SGA和PGA)
SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA正相反PGA是只被一个进程使用的区域,PGA在创建进程时分配在终止进程时回收
4、后台进程(数据写进程、日志写进程、系统监控、进程监控、检查点进程、归档进程、服务进程、用户进程)
数据写进程:负责将更改的数据从数据库缓冲区高速缓存写入数据文件
日志写进程:将重做日志缓冲区中的更改写入在线重做日志文件
系统监控:检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复
进程监控:负责在一个Oracle进程失败时清理资源
检查点进程:负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。
归档进程:在每次日志切换时把已满的日志组进行备份或归档
服务进程:用户进程服务。
用户进程:在客户端,负责将用户的SQL语句传递给服务进程,并从服务器段拿回查询数据。
5、oracle例程:Oracle例程由SGA内存结构和用于管理数据库的后台进程组成。例程一次只能打开和使用一个数据库。
6、SCN(System Change Number):系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。
Oracle数据库的四个主要的用户:sys,system,scott,数据用户
以Scott下的四张表为例,(Oracle自带的),信息如下:
EMP---员工表,SaleGrade---工资等级表,Bouns---工资表,部门表---dept
简单查询
基本语法如下:
select 【distinct】* | 列名【别名】,列名2【别名】,。。。from 表名【别名】 |
查询所有员工的基本的年薪,同时查询员工的编号的姓名。
select t.empno,t.ename,t.sal*12 a from emp t;
限定查询
指在全部数据查询结果出来之前加上一些过滤条件,主要满足此过滤条件的数据都可以显示出来,而过滤条件可以设置多个,如果要设置限定条件的话,必须使用where这个关键词
基本语法如下:
select 【distinct】* | 列名【别名】,列名2【别名】,...from 表名【别名】 where 条件(n)
例如:
查询工资高于2000的全部员工信息
select * from emp t where t.sal > 2000
按照某个指定字段,将查询出来的结果进行排序
基本语法如下:
Select * from table where … order by 排序字段 [desc|asc]
·DESC : 表示的是降序排列
·ASC:表示的是升序排列(默认)
例如:
查询所有雇员,并且按照工资来升序排列
select * from emp t order by t.sal asc;--根据工资升序排列
单行函数就是完成一个子功能的小的操作函数,例如,可以进行字符串大小写转换等等,对于一个数据库而言,除了sql语句之外,那么剩下的就是要掌握单行函数,单行函数是数据库自己的功能,而且有些功能可以通过程序来进行处理,单行函数一共分为5种:字符函数、数字函数、日期函数、转换函数、通用函数。
字符函数:字符函数的主要功能就是对字符串进行数据的处理操作,一般字符函数包含:upper()、lower()、initcap()、length()、substr()、replace()、instr()
数字函数,主要有三个:round(),trunc(),mod()
日期函数:
取得当前日期:sysdate
取得系统当前日期之后,在日期操作中,还包含了三个数学公式:
·日期+数字= 日期(若干天后的日期)
·日期-数字 = 日期(若干天前的日期)
·日期-日期=数字(两个日期的天数差)
常用的四个日期操作函数:
·取出若干月后的日期:add_months(列|日期,增长的月份)
·取出两个日期之间经历的月数:months_between(列|日期,列|日期)
·取出一个日期所在月的最后一天:last_day(列|日期)
·取出下一个指定的日期:next_day(列|日期)
转换函数:
转换就是指可以通过函数实现这些数据类型的转换。
·数字或者日期转换成字符串:to_char(列|日期|数字,转换格式)
·字符串转换成日期:to_date(列|字符串,转换格式)
·字符串转换成数字:to_number(列|字符串)
例如:
例如查询职工姓名,编号,薪水,职位,入职日期:
select t.ename,t.empno,t.sal,t.job,t.hiredate from emp t where t.hiredate between to_date('1981-01-01','yyyy-mm-dd')
select count(e.empno),avg(e.sal),sum(e.sal) sumsal from emp e,dept d
where e.deptno=d.deptno group by d.deptno,d.dname order by sumsal
select e.empno 员工编号,e.ename 员工姓名,e.mgr 员工上级编号,a.ename 上级名字,a.sal 上级收入 from emp e,emp a
where e.mgr=a.empno(+) order by a.sal desc
select b.ename 员工名字,b.empno 员工编号,count(a.empno) 员工数量,
avg(a.sal) 平均薪水,sum(a.sal) 总薪水 from emp a,emp b
where a.mgr = b.empno group by b.ename,b.empno order by 总薪水
*注意:统计函数要和group by一起使用
如何安装Oracle数据库? http://blog.csdn.net/weixin_36380516/article/details/65935820