oracle数据库
第一章数据库 一、 1.数据库(DB) : (1)特性:共享性,独立性,完整性,减少数据冗余。 2.数据库管理系统(DBMS):功能: (1)数据定义功能:语言, (2)数据操作功能:查询,插入,修改,删除, (3)数据控制功能:提供数据的安全性,完整性,并发性, (4)数据库建立维护功能 3.数据库系统(DBS): (1)组成:DBS=DB+DBMS (2)分类:客户/服务器模式(c/s) 三层客户/服务器模式(b/s) 二、数据模型(抽象)
- 分类: (1)概念模型:(信息模型) 能力:(1)、具有对现实世界的抽象和表达能力 (2)、完整精确的语义表达能力 (3)、易于理解和修改 (4)、易于向DBMS所支持的数据模型转换 (2)逻辑模型:分类:(1)、层次模型(2)、网状模型(3)、关系模型
- 三要素:(1)数据结构:静态特征(2)数据操作(3)数据完整性约束
- 层次模型 网状模型 关系模型 (1)、层次模型:采用树状结构,有且仅有一个根结点,一对多 (2)、网状模型:(3)、关系模型:二维表,
- 关系数据库: (1)、基本概念: 关系,元组(行,不可重复出现,顺序可变),属性(列,顺序可任意更改),域,关系模式,候选码,主关键字(primary key,唯一识别的),外关键字(foreign key) (2)、关系运算: 1)、选择:从行中选,单目运算 2)、投影:从列中选,单目运算 3)、连接:双目运算 三、数据库系统结构
- 三级模式结构: (1)、外模式(子模式,用户模式) (2)、模式(概念模式,逻辑模式) (3)、内模式(存储模式)
- 二级映像功能: (1)、外模式/模式映像 (2)、模式/内模式映像 四、数据库设计: 1.概念结构设计: E-R模型即实体-联系模型 组成:实体,属性,实体型,实体集,联系(实体之间联系1:1,1:n,n:n)。 2.逻辑结构设计:E-R图 习题: 1.下面不属于数据模型要素的是(C) A:数据结构B:数据操作C:数据控制D:完整性约束 2.数据库(DB)数据库系统(DBS)和数据库管理系统(DBMS)的关系是(B) A:DBMS包含DBS和DB B:DBS 包含DBMS 和DB C:DB包括DBS和DBMS D:DBS 就是DBMS也就是DB 3.如果关系中某一属性组的值能唯一地标识一个元组,则称之为(D) A:候选码B:外码C:联系D:主码 4.以下对关系性质的描述中,(B)是错误的。 A:关系中每个属性值都是不可分解的 B:关系中允许出现相同的元组 C:定义关系模式是可以随意指定属性的排列顺序 D:关系中元组的排列顺序可任意交换 5.数据库设计中概念设计的主要工具是(A) A:E-R图 B:概念模型 C:数据模型 D:范式分析 6.数据模型由(数据结构)(数据操作)(完整性约束)组成 7.实体之间的联系分为(一对多)(一对一)(多对多)3类 8.数据库系统的三级模式包括(外模式)(内模式)(模式) 9.数据库的特性包括(独立性)(共享性)(完整性)(减少数据冗余) 10.假设学生成绩信息管理系统在需求分析阶段收集到以下信息: 学生信息:学号,姓名,性别,出生日期 课程信息:课程号,课程名,学分 该业务系统有以下规则: (1)一名学生可以选修多门课程,一门课程可被多名学生选修 (2)学生选修的课程要在数据库中记录课程成绩 1)根据以上信息画出合适的E-R图 2)将E-R图转换为关系模式,并用下划线标出每个关系的主码说明外码 11.设图书馆借阅系统在需求分析阶段搜集到以下信息: 图书信息:书号,书名,作者,价格,复本量,库存量 学生信息:借书证号,姓名,专业,借书量 该业务系统有以下约束: 一个学生可以借阅多种图书,一种图书可被多个学生借阅 学生借阅的图书要在数据库中记录索书号借阅时间 (1)根据以上信息画出合适的E-R图 (2)将E-R图转换为关系模式,并用下划线标出每个关系的主码说明外码。 第二章ORACLE 11g数据库 1.ORACLE 11g数据库的特性:(1)可管理性 (2)PL/SQL新特性(3)增强应用开发能力 (4)高可用性(5)网格计算 2.习题: 3.下列操作系统中,不能运行Oracle11g 的是(B) A:Windows B: Macintosh C:Linux D:UNIX 4.关于SQLPLUS 的叙述正确的是(A) A:SQLPLUS 是ORACLE 数据库的专用访问工具 B:SQLPLUS 是标准的SQL访问工具,可以访问各类关系数据库 C:DB包括DBS+DBMS D:DBS 就是DBMS,也是DB 5.SQLPLUS 显示student表结构的命令是(B) A:LIST student B:DESC student C:SHOW DESC student D: SHOW STRUCTURE student 6.将SQLPLUS 的显示结果输出到E:dp.txt的命令是(D) A: SPOOL TO E:dp.txt B:SPOOL ON E:dp.txt C: SPOOL E:dp.txt D:WRITE TO E:dp.txt 7.SQLPLUS 执行刚输入的一条命令用(A) A:正斜号(/)B:反斜号()C:感叹号(!)D:句号(.) 8.在SQLPLUS 工具中,可以运行(SQL语句)和(SQLPLUS命令) 9.使用SQLPLUS (describe)命令可以显示表结构的信息 10.使用SQLPLUS 的(get)命令可以将文件的内容调入缓冲区,并且不执行。 11.使用SQL*PLUS 的(save)命令可以将缓冲区的内容保存到指定文件中。 第三章创建数据库
- 体系结构: (1)逻辑结构 : 1)表空间(默认的表空间):example 表空间 (实例表空间)system 表空间(系统表空间)sysaux表空间(辅助系统表空间)temp表空间(临时表空间 )undotbs 表空间 (重做表空间)users表空间 2) 段 盘区 数据块(数据库中最小的,最基本的存储单位)3) 表4) 索引5) 用户6) 方案 (2) 物理结构:数据文件 控制文件(二进制) 日志文件 初始化参数文件和其他文件。 (3) 总体结构 :实例 内存结构:(1)系统全局 SGA (数据块缓存区,字典缓存区,重做日志缓冲区,共享池) 进程:用户进程,服务器进程,后台进程 习题: 2.(C)是Oracle 数据库的最小存储分配单元 A:表空间 B:盘曲 C:数据块 D:段 2.当数据库创建时,(A)会自动生成。 A:SYSTEM 表空间 B:TEMP 表空间 C:USERS 表空间D:TOOLS表空间 3.每个数据库可以有(A)控制文件 A:3个B:7个C:8个D:10个 4.每个数据库至少有(B)重做日志文件 A:1个B:2个C:3个D:任意个 5.解析后的SQL语句在SGA(A)是循环使用的。 A:数据缓冲区 B:字典缓冲区 C:重做日志缓冲区D:共享池 6.在全局存储区SGA中(C)是循环使用的。 A:数据缓冲区 B:字典缓冲区 C:重做日志缓冲区D:共享池 7.当数据库运行在归档模式下,如果发生日志切换,为了不覆盖旧的日志信息,系统将启动(C)进程。A:LGWR B:DBWR C:ARCH D:RECO 8.(D)进程用于将修改后的数据从内存保存到磁盘数据文件中。 A:PMON B:SMON C:LGWR D:DBWR 9.一个表空间物理上对应一个或多个(数据)文件。 10.Oracle 数据库系统的物理存储结构主要由(数据文件)(控制文件)和(日志文件)3类文件组成。 11.用户对数据库的操作如果产生日志信息,则该日志信息首先存储在(日志缓冲区)中然后由(lgmr)进程保存到(日志文件)。 12.在Oracle实例系统中,进程分为(用户进程)(服务器进程)(后台进程)。 第四章创建和使用表 一、1.表的基本概念:(1)表和表结构:1)表 2)表结构 3)记录 4)字段 5)空值 6)关键字 2.数据类型:数值型,字符型:char nchar varchar2,日期型, 3.表结构设计 二、习题 1.在商品表(goods)中,需要通过商品号(gid)字段唯一标识一条记录,应建立(A)约束 A:主键B:外键C:唯一约束条件D:检查约束条件 2.在商品表(goods)中,为使每件商品有唯一名称,在商品名称(gname)字段应建立(C)约束。A:主键B:外键C:唯一约束条件D:检查约束条件 3.在学生表(student)中某一条记录的总分(tc)字段暂时不具有任何值,其中将保存(B) A:空格B:null C:0 D:不确定的值,由字段类型决定 12.在成绩表(score)中的学号(sno)字段,在另一个学生表(student)中是主键,该字段应建立(D)约束。A:主键B:检查约束条件C:唯一约束条件D:外键 13.(表空间)是Oracle 最大的逻辑存储结构。 14.在安装Oracle系统时,一般会自动创建6个默认的表空间分别(system表空间)(sysaux表空间)(temp表空间)(undotbs1表空间)(users表空间)(example表空间) 15.表空间的管理类型可以分为(数据字典管理)(本地化管理) 16.表空间的状态属性有(online)(offline)(read write)(read only)4种状态。 第五章PL/SQL基础 一、SQL语言 1.分类:1)数据定义语言(DDL):创建表(create)修改表(alter)删除表(delete) 2)数据操作语言(DML):插入记录(insert)修改记录(update)删除记录(delete) 3)数据查询语言(DQL):查询(select) 4)数据控制语言(DCL):grant,revoke 2.SQL语言的特点: 1)高度分过程化 2)应用于数据库的语言 3)面向集合的操作方式 4)既是自含式语言又是嵌入式语言 5)综合统一 6)语言简洁,易学易用 3.在PL/SQL中的数据定义语言: (1)创建表:create table 表名 (字段名,字段类型,not null/null,primary key) (2)修改表:alter table 表名 { add(添加一列) drop column(删除列) (3)删除表:drop table 表名 4.在PL/SQL中的数据操作语言: (1)插入语句:语法格式:insert into表名 values () 例子: 1).向employee表中插入一行:1001,刘松涛,男,1972-10-07,公司集体宿舍 答: 2).向student表中插入数据 答: (2)修改语句: Update 表名 set 列名(新增的)where 条件 例子: 1)在employee 表中 将刘松涛的员工号改为1021,员工地址改为东大街34号。 答: 2)在student表中,将所有学生的学分增加2分。 答: (3)删除语句: 1.delete语句 : 语法格式:delete from 表名 where 例子: 1).在employee表中删除员工号为1021的行 答: 2.Truncate table 语句:语法格式:truncate table表名 5.在PL/SQL中的数据查询语言: 语法格式:select 字段 from 表名 { where(条件),group by(分组),having (分组条件表达式),order by (排序表达式) (1).投影查询: 1)投影指定的列 例子:查询student表中的所有学生的学号,姓名,班号。 答: 2)投影全部列 例子:查询student表中所有列 答: 3)修改查询结果的列标题: 例子:查询student 表中所有学生的sno,sname 和speciality 并将结果中各列的标题分别改为学号,姓名,专业。 答: 4)计算列值:(±*/) 例子:列出goods表中的商品号,商品名称,商品总值 答: 5)去掉重复行:(关键字:distinct) 例子:查询student 表中sclass 列消除结构中的重复行。 答: (2)选择查询: 1):表达式比较: 例子:1)查询student 表中班号为201205或性别为女生的学生 答: 2)查询goods表中价格为3000元以上的商品。 答:
):指定范围: 例子:1)查询score 表成绩为86,92,95的记录。 答:select * from score where grade in(86,92,95); 2)查询goods 表中价格在1500元到4000元之间的商品。 答:select * from goods where price between 1500 and 4000; 3)查询student表中不在1992年出生的学生情况。 答: 4):模式匹配: 例子:1)查询student表中姓林的学生情况 答:select * from student where sname like ‘林%’; 2)查询goods表中商品名称含有Inspiron 的商品。 答:select * from goods where gname like ‘%inspiron%’; 5):空值判断: 例子:查询已选课但未参加考试的学生情况。 答:select * from score where grade is null; (3):分组查询和统计计算: 1.聚合函数:(1)count例子: 1)求学生的总人数。 答:select count() as 总人数 from student ; 2)查询201236班学生的总人数。 答: select count() as总人数 from student where sclass = ‘201236’; (2)sum 和 avg 函数:例子: 1)查询goods表库存量的总合。 答 :select sum (stockqt) as 库存量总和 from goods; 2)查询1004课程的平均分。 答:select avg (grade)as 平均分 份额、from score where cno=’1004’; (3)max 和 min函数:例子: 1)查询8001课程的最高分,最低分和平均成绩。 答:select max(grade)as 最高分,min(grade)as最低分,avg(grade)as平均成绩 from score where cno=’8001’; 2.group by子句:例子: 1)查询各个班级的人数。 答:select sclass as班级 ,count()as人数 from student group by sclass; 2)查询各类商品的库存量。 答:select gclass as商品类型代码 ,sum(stockqt)as库存量 from goods group by gclass; 3)查询各门课程的最高分,最低分和平均成绩。 答:select cno as 课程号,max(grade)as最高分,min(grade)as 最低分,avg(grade)as平均成绩from score where not grade is null group by cno; 4)求选修各门课程的平均成绩和选秀人数。 答:select cno as 课程号,avg (grade)as 平均成绩,count ()as 选修人数 from score group by cno; 当where 语句与group by 语句,having语句,order by 语句在一个查询语句中按这个顺序进行。 3.having 语句:例子: 1)查询平均成绩在90分以上的学生的学号和平均成绩 答:select sno as 学号,avg(grade)as 平均成绩from score group by sno having avg (grade)>90; 2)查询选修课程3门以上且成绩在85以上的学生的情况。 答:select sno as学号,count(cno)as 选修课程数 from score where grade>=85group by sno having count ()>=3; 3)查询至少有5名学生选修且以8开头的课程号和平均分数。 答:select cno as 课程号,avg(grade)as 平均分数 from score where cno like ‘8%’ group by cno having ()>5; 3.排序查询:例子: 1)将商品类型代码为10的商品按价格排序 答:select from goods where gname=‘10’ order by price; 2)将201236班级的学生按出生日期降序排序。 答:select from student where sclass =‘201236’ order by sbirthdaydesc; 5.习题: (1).以下语句执行出错的原因是(B) A:不能对grade(学分)计算机平均分 B:不能在group by 子句中使用别名 C:group by 子句必须有分组内容 D:score 表没有sno 列 (2).统计表中记录数,使用(C)聚合函数。 A:sum B:avg C:count D:max (3).在select 语句中使用关键字(D)去掉结果集中的重复行 A:all B:merge C:count D:max (4).查询course 表的记录数,使用语句(A) A:select count(cno)from course B:select count (tno) from course C: select max (credit) from course D: select avg (cridit) from course (5).在DLL语句中,(create table)语句可以创建表,(alter table )语句可以修改表,(drop table)语句可以删除表 (6).在DML语句中,(insert)语句可以在表中插入记录(update)语句可以修改表记录,(delete)语句可以在表中删除记录 (7)Select语句(select )(from)(where)(group by)(having)(order by)6个子句 (8)Where 子句可以接受(from)子句输出的数据,having 子句可以接收(from)子句(where)子句或(order by)子句输出的数据。 (9)查询score 表中学号为121004,课程号为1201的学生成绩。 答:select grade as 成绩from sroce where sno='121004’and cno=‘1201’; (10)列出goods 表的商品名称,商品价格和打7折后的商品价格 答:select gname as 商品名称,price as 商品价格,price0.7as 打7折后的商品价格 from goods; (11) 查询student 表中姓周的学生情况 答:select * from student where sname like’周%’; (12)查询通信专业的最高学分的学生的情况 答:select max (tc)as最高学分 from student where speciality=‘通信’; (13)查询1004课程的最高分,最低分,和平均成绩 答:select max (grade)as最高分,min(grade)as 最低分,avg(grade) as 平均成绩 from score where cno=‘1004’; (14)查询至少有3名学生选修且以4开头的课程号和平均分数 答:select cno as 课程号,avg(grade)as 平均分数from score where cno like ‘4%’ group by cno having count()>=3; (15)将计算机专业的学生按出生时间升序排列 答:select * from student where speciality=‘计算机’ order by sbirthday; (16)查询各门课程最高分的课程号和分数,并按分数降序排列。 答:select cno as 课程号,max(grade)as最高分 from score group by cno order by max(grade) desc; 第六章PL/SQL高级查询 1.连接查询: (1).使用连接谓词指定的连接:连接条件由比较运算符在where子句中给出。 1)等值连接:结果包含所有 例子:查询学生的情况和选修课程的情况 答:select student.,score. from student, score where student.sno=score.sno; 2)自然连接:去除相同的数据 例子:查询学生的情况和选修课程的情况 答:select student.*,score.cno,score.grade from student, score where student.sno=score.sno; 查询选修了“数学电路”且成绩在80分以上的学生姓名。 答:selecta.sno a.sname,b.cname,c.grade from student a,score b,course c where a.sno=b.sno and b.cno=c.cno and b. cname=‘数学电路’ and c.grade >=80; 3)自然连接:例子:查询选修了“1201”课程的成绩高于学号为“121002”的成绩的学生姓名 。 答:select a.sname from score.a,score.b where a.cno=’1201’and a.grade.b.grade and b.sno=’121002’ and b.cno=’1201’ order by a.grade desc; (1)使用join关键字指定的链接:在from子句中用join 关键字,用on 子句指定连接条件 1)、内连接按照on 所指定的连接条件合并两个表,返回满足条件的行。内连接是系统默认的,可省略inner 关键字 例子:查询学生的情况和选修课程的情况。 答:select * from student inner join score on student.sno = score.sno; 查询选修了数据库系统课程且成绩在84分以上的学生情况。 Select a.sno,a.name,c.cname,b.grade from student a join score b on a.sno = b.sno join course c on b.cno = c.cno where c.cname= ‘数据库系统’ and b.grade >=84; 2)、外连接:左外连接,右外连接,完全外连接。 例子:采用左外连接查询教师任课情况。表名字+Left join +表名字+on
采用右外连接查询教师任课情况。
采用全外连接查询教师任课情况。
3)、交叉连接(cross join) 例子:采用交叉连接查询教师和课程所有可能组合。
3.集合查询:运算符:union(并 不包括重复行)union all (并,包括重复行)intersect (交) minus(差) 1)使用union操作符 例子:查询性别为女及选修了课程号为4002的学生
查询所有女教师和女学生的姓名,性别,和出生日期
2)使用union all 操作符 例子:查询性别为女及选修课程号为4002的学生,不消除重复行。
3)使用intersect 操作符 例子: 1)查询即选修了课程号为8001又选修了课程号为4002的学生的学号,姓名和性别。
4)查询及选修了英语又未选修数字电路的学生的姓名,性别,出生日期和班号。
4.子查询: 1)、in子查询: 例子:查询选修了课程号为8001的课程的学生情况。
查询未选修数字电路课程的学生情况。
查询选修某课程的学生人数多于4人的教师姓名。
查询在计算机专业任课的教师情况。
)
2)、比较子查询: 例子:查询比所有计算机专业学生年龄都小的学生
查询课程号8001的成绩高于课程号4002成绩的学生。
3)exists 子查询 例子:查询选修1004课程的学生姓名
查询所有任课教师姓名和学院
习题: 1.需要将student表所有行连接score 表所有行,应创建(C) A:内连接B:外连接C:交叉连接D:自然连接 3.运算符(B)可以用于多行运算。 A:= B:IN C:<> D: LIKE 3.使用(A)关键字进行子查询时,只注重子查询是否返回行,如果子查询返回一个或多个行,则返回真,否则为假。 A:exists B:any C:all D:in 3.使用交叉连接查询两个表,一个表有6条记录,另一个表有9条记录,如果未使用子句,查询结果有(D)条记录。 A:15 B:3 C:9 D:54 4.SEELECT 语句的where子句可以使用子查询,(子查询)的结果作为父查询的条件。 5.使用in操作符实现指定匹配查询时,使用(any)操作符实现任意匹配查询,使用(all)操作符实现全不匹配查询。 6.join关键字指定的连接类型有(inner join)(outer join)和(cross join)3种,外连接有(left outer join)(right outer join)(full outer join)3种 7**.集合运算符(union)实现了集合的并运算,集合运算符(intersect)实现了集合的交运算,集合运算符(minus)实现了集合的差运算。** 8.查找选修了英语的学生姓名及成绩。
9.查询选修了高等数学且成绩在80分以上的学生情况。
10.查询选修某课程的平均成绩高于85分的教师姓名。
12.查询及选学过1201号课程又选学过1004号课程的学生姓名,性别和总学分;
(2)查询及选学过1201号课程,又未选学1004号课程的学生姓名,性别和总学分。
12.查询每个专业最高分的课程名和分数
13.查询通信专业的最高分
14.查询数据库系统课程的任课教师
15.查询成绩高于平均分的成绩记录。
Select sno,cno,grade From score Where grade>( Select avg(grade) From score Where grade is not null);