资源描述
中原工学院
Oracle总结报告
姓 名:
班 级:
学 号:
完成日期: 2015年1月5日
目录
目录 2
Oracle简介 3
一、数据库基本概念 4
二、SQL语句 5
三、数据库查询 5
1、查询操作 5
2、查询语句 5
2.1投影操作 5
2.2选择操作: 6
3、where子句 6
3.1通配查询 6
3.2逻辑符 7
四、单行函数 7
4.1字符函数 7
4.2数值函数 8
4.3日期函数 8
4.4不同数据类型间转换函数 8
4.5关联操作 9
五、组函数 10
5.1 group by 10
5.2 组合函数 10
5.3子查询 10
六、约束 10
6.1完整性约束 11
七、数据操纵语言(DML) 11
7.1 INSERT 11
7.2 UDPATE 12
7.3 DELETE 12
总结 12
Oracle简介
Oracle简称甲骨文,是仅次于微软公司的世界第二大软件公司,该公司名称就叫Oracle。该公司成立于1979年,是加利福尼亚州的第一家在世界上推出以关系型数据管理系(RDBMS)为中心的一家软件公司。
Oracle公司是全球最大的信息管理软件及服务供应商,成立于1977年,总部位于美国加州 Redwood shore。Oracle公司现有员工超过三万六千人,服务遍及全球145个国家。Oracle公司拥有世界上唯一一个全面集成的电子商务套件Oracle Applications R11i,它能够自动化企业经营管理过程中的各个方面,深受用户的青睐,是世界最大的应用软件供应商。Oracle电子商务套件涵盖了企业经营管理过程中的方方面面,虽然它在不同的方面分别面对不同的竞争对手,而Oracle电子商务解决方案的核心优势就在于它的集成性和完整性,用户完全可以从Oracle公司获得任何所需要的应用功能,更重要的是,它们具有一致的基于Internet技术的应用体系结构,而如果用户想从其它厂商处获得Oracle电子商务所提供的完整功能,不仅需要从多家厂商分别购买不同的应用,而且需要另请咨询公司把这些不同的应用装配起来,还必须确保它们能够协同地工作。
一、数据库基本概念
1)数据库管理系统:一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,Oracle、DB2、Mysql、MS Server;
2)数据库: 按照数据结构来组织、存储和管理数据的仓库。
3)数据:
4)表(Table):数据库中的表与我们日常生活中使用的表格类似,它也是由行(Row)和列(Column)组成的。
5)视图:其实是一个虚拟的表,在数据库中并不实际存在。视图数据是由查询数据库表产生的,它限制了用户能看到和修改的数据。
6)索引:索引是根据指定的数据库表列建立起来的顺序。它提供了快速访问数据的途径,并且可监督表的数据,使其索引所指向的列中的数据不重复。
7)存储过程:存储过程是为完成特定的功能而汇集在一起的一组SQL 程序语句,经编译后存储在数据库中的SQL 程序。
8)触发器:触发器是一个用户定义的SQL 事务命令的集合。当对一个表进行插入、更改、删除时,这组命令就会自动执行。
9)ER图:实体关系图
10)范式:
第一范式:数据库表的每一列都是不可分割的基本数据项;
第二范式:要求实体的属性完全依赖于主关键字primary key:
SelectCourse 表(学号, 姓名, 年龄, 课程名称, 成绩,学分)
1、数据冗余
2、更新异常
3、插入异常
4、删除异常
第三范式:数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖;
11)事务特性:原子性、一致性、隔离性、持久性
设置oracle事务隔离界别:
set transaction isolation level serializable;
未提交读:事务A可以读取事务B未提交的数据。
提交读:事务A只能读取事务B提交了的数据
可重复读:在同一个事务A里,先后执行同一个查询语句,得到的结果是一样的。
序列化读:事务A在执行的时候不允许其他事务的执行,隔离级别最高。
12) SQL:结构化查询语言,是操作关系型数据库中的对象。
二、SQL语句
SQL Statement (SQL 语句)
1)DDL Data Defination Language数据库定义语言
create,alter,drop
2)DML Data Management Language数据库操纵语言
insert ,upate ,delete
3)DCL Data Control Language数据库控制语言
grant revoke
4)Select数据库查询语句
Select
三、数据库查询
1、查询操作
1)投影操作只查询表的某些字段如: select name,birthday from student;
2)关联操作 多个表操作
3)选择操作 根据条件筛选记录,可认为是添加了where子句
2、查询语句
2.1投影操作
①select table_name from user_tables;查询系统表
②desc 表名;查看表的结构
③去重复数据 distinct
例:select distinct dept_id,title from s_emp;
这样写的话,distinct 会管到后面的所有字段,即对所有字段排序后,再排重。即排重的是dept_id和title的组合。
在select 语句中可以使用数学表达式。
select first_name ,salary*12 from s_emp;
④别名,三种方法
1、select first_name name from s_emp;
2、select first_name as name from s_emp;
3、select first_name "first name" from s_emp; 如果别名中有空格或大小写敏感,要把双引号括起来;父查询可调用子查询的别名,当前查询调用当前别名需要看执行顺序;双引号别名调用时仍需双引号但是内部字母区分大小写;且识别空格,有多少是多少;多个空格在显示时只有一个空格,无空格则不显示,这是和使用相区别;只有双引号中能添加空格;若别名中有空格则加上” ”
⑤字符串拼接使用||符号
select first_name||’ ’||last_name from s_emp;(||’ ’|| 无论哪里出现空格都对拼接无障碍且无空格显示)
2.2选择操作:
①排序 order by 字段 | 别名 | 字段位置
升序(asc)|降序(desc)
select first_name,salary from s_emp order by salary;默认的是升序
②排序字段的空值处理
降序时null值排在前,升序时null排在后
select first_name,salary from s_emp order by first_name,salary desc;
按first_name 升序排序,如果first_name相同,再按salary 排序
能够触发排序的关键字:distinct、order by、group by
3、where子句
where子句使用在select ... from ... 后面,用来选择所需(符合条件的)的记录where后面跟的是表达式也就是 XXX=XXX,XXX between X and X,XXX in
(X,X,X),like '...'等
请注意select columns from table where clause
是先from表再where条件,最后select出你要的字段。
非数字类单引号引用;
3.1通配查询
between ...and ...表示结果在这区间之间,between and是一个闭区间,也就相当于... <= ... and ... >= ... 。
!=,<>,^=,这三个都是指不等于,且<=,>=,=,这些运算符也可以使用。
in (va1,val2,...)表示判断结果是否在这个枚举中存在,即每一个值都去匹配
like表示字符串通配查询,'%'表示任意多个字符,'_',表示任意一个字符。
注意:转义的用法:like ‘S\_%’ escape ‘\’;
escape指定义什么是转义符,可以是任意的特殊符号,包括数字和字符串,但数字和字符串要是定义为转义符会不会对操作造成影响需要考虑考虑。
3.2逻辑符
and表示只有两个或多个条件同时满足。
or表示条件只要满足其中只一就可以。
all表示条件都满足时。
not表示是可以与以上的条件产生反效果。
空值会对not in造成影响,也就是不等于任何值,但是空值例外,空值跟任何值比较都为空。not in不包含空值,null不被算在内。不包含在里面的值可能是有空值但是空值会被not in排除在。
is null表示判断值是否为空。
注意:Oracle中的字符串是严格区分大小写的。这里所谓的字符串是指数据表中的数据(信息)。
select {*,column[s] [alias],...} 在这里实现投影操作
from table_name
[where clause] 查询条件 注意:[ ] 表示这部分内容可有可无
[order by columns(asc|desc)] 排序子句
注意:[ ] 表示这部分内容可有可无;(|)选择其一
四、单行函数
4.1字符函数
lower(字段名)表示转小写,其中的参数可以是一个字符串常量或是一个字段名
upper(字段名)表示转每个单词首字母大写;
initcap(字段名)表示首字母大写;
concat(字段1,字段2)表示字符串拼接;(||’‘||)
substr(字段名,起始位置,取字符个数)表示截取字符子串,位置是从1开始
length(字段名)表示该字段的字符长度,打出字符串长度
4.2数值函数
round(数据,保留小数点后几位)表示四舍五入
可以用负数表示小数点前,0,表示小数点后第一位,也就是保留个位,-1表示个位(保留到十位);小数点后面的位数可以为负数;从小数点处开始数,向左为负,向右为正。
trunc(数据,保留的位数(小数点后位数))表示截取数字函数,截取个位之后补0;小数点后面的位数可以为负数;从小数点处开始数,向左为负,向右为正。在边截取整数位数字后补零;
例:select trunc(123.456,1) from dual;
4.3日期函数
日期格式,全日期格式世纪信息,年月日,时分秒。
缺省日期格式,日-月-年 dd-mon-rr
修改当前会话的日期格式,会按照指定的格式输出日期
alter session set nls_date_format='yyyy mm dd hh24:mi:ss';
返回当前日期 sysdate
日期是格式敏感的
日期内置函数:
months_between(sysdate,addmonth(sysdate,5)) //两个月有多少天。
add_months(sysdate,-5) 在系统时间基础上延迟5月
add_months(sysdate,-5*12) 在系统时间基础上延迟5年
last_day(sysdate) 一个月最后一天
next_day(sysdate,’Friday’) 下个星期星期几
round (sysdate,’day’) 不是四除五入,是过了中午的留下,不过的略掉
trunc(sysdate,’month’) 不到一月的都省略
4.4不同数据类型间转换函数
将字符转换成数字 to_number('...')
将数字转字符to_char(number,'fmt') fmt是数字格式
将字符串转成日期 to_date('...','日期格式')
select to_char(3456.789,'9,999.999') from dept;变成一个字符串的格式,9是一种显示格式,运行结果3,456.789除了9之外还可以写0,本位上有的话直接写,没有的话补0
select to_char(3456.78,'000,000.000') from dept;运行结果003,456.780
select to_char(3456.78,'fm$99,000.000') from dept;去除前面的空格
select to_number('123.4')+3 from dept;有默认的转换即去掉to_number,不同类型的转换可以强行也可以自动(不是所有的都可以)
格式是9时:9的整数个数不能小于数字的整数位数,小数部分没有的话会补0
0时:0的整数个数不能小于数字的整数位数,前后没有的都补0
改变NLS_LANG的值让输出结果的货币单位是¥或$,需修改环境变量,临时的即可
setenv NLS_LANG ' SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
setenv NLS_LANG ' AMERICAN_AMERICA.US7ASCII'
在XP系统的浏览器或Oracle的PLSQL中可使用下面指令修改语言环境,之后并且要输入commit提交:
ALTER SESSION SET NLS_LANGUAGE=american;
ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';
4.5关联操作
①等值查询:表之间的连接是通过相等的字段值连接起来的查询称为等值连接查询。
查询员工的名称,部门名称,地区名称
select e.first_name,d.name,r.name from s_emp e,s_dept d,s_region r where e.dept_id=d.id and d.region_id=r.id;
查询ben在那个部门那个地区上班
select e.first_name,d.name,r.name from s_emp e,s_dept d,s_region r where e.dept_id=d.id and d.region_id=r.id and lower(e.first_name)='ben';
②非等值连接: 连接条件使用除等于运算符以外的其它比较运算符,比较被连接的列的列值。这些运算符包括>、>=、<=、<、!> 、!<和<>等
查询公司员工工资级别
工资级别表 salgrade字段: id,losal,hisal (级别,最小工资,最大工资)
select e.first_name,s.id from s_emp e,salgrade s where e.salary between s.losal and s.hisal;
③自连接:可以把一张表看成多张表
查询员工的经理名称
select e.first_name as emp_name,m.first_name as manager_name from s_emp e,s_emp m where e.manager_id=m.id;
为一个表起了别名,就要用它的别名,不能再用表的原来的名字
如果为一个表起了两个别名,那就是两张别名表自连接是指同一个表中记录与记录之间的关系
解决自连接方法:通过为表起别名
④外连接:一个都不能少
外连接查出的数据=内连接查出的数据+内连接匹配不上的数据
select e.first_name as emp_name,m.first_name as manager_name from s_emp e,s_emp m where e.manager_id=m.id(+); 有(+)表示本方会为对方补空值
注意条件(+)跟在要全部选出的一方 , 即一方比一方多余的记录要输出的加(+),不能使用in 和or;
五、组函数
5.1 group by
表示分组函数,having表示对查询结果进行过滤
where子句用来筛选from子句中指定的操作所产生的行,不能跟组函数
group by子句用来分组where子句的输出
having子句用来从分组的结果中筛选行
5.2 组合函数
a)avg查询平均值
b)count查询记录条件,参数可以是任何类型,忽略空值;多少条记录不包含空值;
c)max查询最大值,字符串从左边第一个开始比,第一相同就比第二个,第一个不相同大的徘前面;
d)min查询最小值
e)sum查询数字的和,貌似只用于数字,反正字符串 不能用;
5.3子查询
就是可以嵌在任何的sql语句中的select语句,把子查询的结果当做范围再区查询一遍
在select语句中嵌套子查询时,会先执行子查询。一般的会将子查询放在运算符的右边。
六、约束
NOT NULL 约束 (这个字段不允许为空)
create table sunzw_test(c1 number not null,c2 number);---为c1定义了非空约束
NOT NULL 约束只能定义为列级约束
UNIQUE 唯一约束
create table sunzw_test(c1 number primary key,c2 number unique);---为c2定义唯一约束
唯一约束可以为空, 唯一约束不考虑空值联合主键约束,这时只能用表级约束
6.1完整性约束
1、PK(Primary Key 主键约束),唯一且非空,保证数据是干净的
如果一个表有任何一个字段是唯一的,可以用两个字段联合起来做的唯一标识,称为联合主键
引用完整性约束
2、FK(Foreign Key外键约束)至少存在两张表
把外键所在的表称子表,其引用的表称为父表,外键的一些规范约束,是在子表中设置外键,一定是与父表的主键对应
先建父表,后建子表
先删子表,再删父表
3、UK(Unique Key唯一约束) 唯一可以为空
4、not null非空约束
所谓的约束是指在建表的时候对字段设置,当插入(insert)数据时会根据约束对插入的数据进行检查,例如某一字段为not null,若插入该字段的记录(数据)是一个null值,就会报擦插入数据错误。
把ER图关系模式转化成表
关系:
一对多 多的那边做外键
多对多 用中间表把两个表连起来,学生表---课程表是多对多关系,需要建立一个中间表,学生选课表,这个包含两个表的主键做为它的自己的联合主键
一对一外键加个唯一约束
七、数据操纵语言(DML)
7.1 INSERT
INSERT 一次只能插一条
INSERT INTO tablenmae VALUES(colvalue,colvalue,…);
INSERT 语句中可以放函数 insert tablename values(12,sysdate)
INSERT 可以只插入某个列的值,INSERT into tablenmae (sunzw_emp(列名)) values(列值)
INSERT 可能违反各种约束
7.2 UDPATE
UPDATE tablename SET column=value,column=value… WHERE condition
注意:如果不加where条件,修改可影响到所有的记录,所有记录将被修改
只能一条一条跟新
7.3 DELETE
DELETE FROM tablename WHERE condition;
用DELETE 删除一张表的记录,删除之后,数据还能找回来
总结
当老师在最后说这个课程结束了,要求我们写出一个总结报告,感觉时间真的过得好快。回顾一下以前老师给我们讲过的东西,真的有很多是我们应该去注意的。学习完Oracle数据库后感觉Oracle真的是一个有意思的课程,需要我们不仅要思考,还要去动手亲自操作。看看之前写的作业觉得真的对这门课程已经产生了极大的兴趣,虽然这门课程结束了但是对于这门课程的学习还是会继续的。
刚开始上机写作业的时候,总是一味的照搬书上所记的句子,总是出现这样那样的错误。有时候一个小小的标点或者大小写都会导致最后运行出现错误,而且出现错误的时候都是英文,回过头去看也找不出是没问题来。通过几次上机以后,我发现一味的照搬不去理解,既不能很好地掌握老师所讲的知识,自己动手的能力也比较差。然后,通过翻看与回顾上节课老师所讲的知识,慢慢理解里面的知识,然后通过理解以后一步步的去完成老师布置得的作业,如果有时候出现了一些运行过程中的问题,不要着急,应该回过头来看看是哪个地方出现了问题,
对于学习Oracle数据库从网络上找资料我认为是比较好的,现在的网络又这么的发达应该去充分利用。我知道Oracle的官方网站: 这里有Oracle的各种版本的数据库、应用工具和权威的官方文档。虽然我是个新手,但是常到哪些相关的数据库论坛或是网站觉得每次的收获都不小,网络对我来说可是个重要的东西,除了Oracle数据库对于其它的一些电脑知识都从网络里学习了不少,我常用的一个搜索网站就是大家都熟悉的百度了。
展开阅读全文