一、 填空题
- 在用 create 语句创建基本表时,最初只是一个空的框架,用户可以使用insert命令把数据插入表中。
- 在基本表不需要时,可以使用 drop table 语句撤消。在一个基本表撤消后,所有的数据都丢弃。所有相关的索引被删除。
- 可以使用 rename 语句改变表名(视图),要求必须是表(视图)的所有者。
- 根据约束的作用域,约束可以分为表级约束和列级约束两种。 列级约束 是字段定义的一部分,只能够应用在一个列上;而另外一种约束的定义独立于列的定义,它可以应用于一个表中的多个列。
- 完整性约束分类:域完整性约束、实体完整性约束、 参照完整性约束 。
- 主键约束 是数据库中最重要的一种约束。在关系中,主键值不可为空,也不允许出现重复,即关系要满足实体完整性规则。
- 唯一性约束确保所在的字段或者字段组合不出现重复值。
- 索引类似字典的和课本目录,是为了加快对数据的搜索速度而设立的。
- 索引类型默认采用 B树数据结构,数据全部集中在叶子节点。
- 视图 是从若干基本表和(或)其他视图构造出来的表。
- 在用户使用视图时才去求相对应的数据。所以视图被称作 虚表 。
- 如果视图对应多个表,一般不允许添加操作,可以通过 触发器解决。
- 使用 with read only 定义只读视图。
- 事务(Transaction)是一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位。
- commit 表示事务成功地结束,此时告诉系统,数据库要进入一个新的正确状态,该事务对数据库的所有更新都以交付实施。
- 一旦执行了commit语句,将目前对数据库的操作提交给数据库(实际写入DB),以后就不能用 rollback 进行撤销。
- 为保证数据库设计水平,必须遵循一定的规则,在关系型数据库中这种规则就称为 范式 。
- 第一范式:简单说就是要确保每列保持 原子性 。
- Oralce数据库在进行物理备份有联机备份和 脱机备份 两种方式可供选择。
- 在多进程Oracle实例系统中,进程分为用户进程、后台进程和 服务进程 。
二、 选择题
1. |
从数据库中删除表的命令是( A )。(选择一项) |
|
|
|
|
|
A. |
DROP TABLE |
|
B. |
ALTER TABLE |
|
C. |
DELETE TABLE |
|
D. |
USE |
2. |
Oracle中要生成数据库表,下列哪个选项是无效表生成的语句( D )。(选择一项) |
|
|
|
|
|
A. |
create table cats(c_name varchar2(10), c_weight number, c_owner varchar2(10)); |
|
B. |
create table my_cats as select * from cats where owner = ‘ME’; |
|
C. |
create global temporary table temp_cats(c_name varchar2(10), c_weight number, c_owner varchar2(10)); |
|
D. |
create table 51cats as select c_name, c_weight from cats where c_weight > 5; |
3. |
如果在一个关系中,存在某个属性(或属性组),虽然不是该关系的主码或只是主码的一部分,但却是另一个关系的主码时,称该属性(或属性组)为这个关系的( C )(选择一项) |
|
|
|
|
|
A. |
候选码 |
|
B. |
主码 |
|
C. |
外码 |
|
D. |
连接码 |
4. |
SQL语句中修改表结构的命令是( C )。(选择一项) |
|
|
|
|
|
A. |
MODIFY TABLE |
|
B. |
MODIFY STRUCTURE |
|
C. |
ALTER TABLE |
|
D. |
ALTER STRUCTURE |
5. |
关系模型有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。定义外键实现的是哪一(些)类完整性( B )。(选择一项) |
|
|
|
|
|
A. |
实体完整性 |
|
B. |
参照完整性 |
|
C. |
用户定义的完整性 |
|
D. |
实体完整性、参照完整性和用户定义的完整性 |
6. |
在关系数据库中,建立数据库表时,将年龄字段值限制在12~40岁之间的这种约束属于( B )。(选择一项) |
|
|
|
|
|
A. |
视图完整性约束 |
|
B. |
域完整性约束 |
|
C. |
参照完整性约束 |
|
D. |
实体完整性约束 |
7. |
用于删除约束的命令是哪一个( C )。(选择一项) |
|
|
|
|
|
A. |
ALTER TABLE MODIFY CONSTRAINT |
|
B. |
DROP CONSTRAINT |
|
C. |
ALTER TABLE DROP CONSTRAINT |
|
D. |
ALTER CONSTRAINT DROP |
8.
|
现有如下关系:职工(职工号,姓名,性别,职务) |
|
|
|
|
|
A. |
部门编号 |
|
B. |
姓名 |
|
C. |
职工号 |
|
D. |
职工号,姓名 |
9. |
要控制两个表中数据的完整性和一致性可以设置"参照完整性",要求这两个表( A )。(选择一项) |
|
|
|
|
|
A. |
是同一个数据库中的两个表 |
|
B. |
不同数据库中的两个表 |
|
C. |
两个自由表 |
|
D. |
一个是数据库表另一个是自由表 |
10. |
删除Oracle数据库中父/子关系中的父表。在删除父表时下列哪个对象不会删除( B )。(选择一项) |
|
|
|
|
|
A. |
相关约束 |
|
B. |
子表 |
|
C. |
相关触发器 |
|
D. |
相关索引 |
11. |
假定USER表的PRIMARY KEY约束名为USER_ID_PK,下面哪一个语句将删除这个约束( C )。(选择一项) |
|
|
|
|
|
A. |
DROP CONSTRAINT USER_ID_PK; |
|
B. |
ALTER TABLE USER DROP USER_ID_PK; |
|
C. |
ALTER TABLE USER DROP CONSTRAINT USER_ID_PK; |
|
D. |
ALTER TABLE USER DROP PRIMARY KEY; |
12. |
对于索引以下不正确的描述是( D )。(选择一项) |
|
|
|
|
|
A. |
索引可以加快查询效率 |
|
B. |
索引与DML速度无关 |
|
C. |
索引创建后会自动被Oracle使用 |
|
D. |
索引不占用存储空间 |
13. |
索引字段值不唯一,应该选择的索引类型为( B )。(选择一项) |
|
|
|
|
|
A. |
主索引 |
|
B. |
普通索引 |
|
C. |
候选索引 |
|
D. |
唯一索引
|
14. |
对于学生—选课—课程的三个关系 |
|
|
|
|
|
A. |
(S#,C#) |
|
B. |
S# |
|
C. |
C# |
|
D. |
GRADE |
15. |
如果要创建一个数据组分组报表,第一个分组表达式是"部门",第二个分组表达式是"性别",第三个分组表达式是"基本工资",当前索引的索引表达式应当是( B )。(选择一项) |
|
|
|
|
|
A. |
部门+性别+基本工资 |
|
B. |
部门+性别+STR(基本工资) |
|
C. |
STR(基本工资)+性别+部门 |
|
D. |
性别+部门+STR(基本工资) |
16. |
哪个约束会自动建立索引( AC )。(选择二项) |
|
|
|
|
|
A. |
主码 |
|
B. |
外码 |
|
C. |
唯一 |
|
D |
CHECK |
17. |
在SQL中,删除视图用( C )。(选择一项) |
|
|
|
|
|
A. |
DROP SCHEMA命令 |
|
B. |
CREATE TABLE命令 |
|
C. |
DROP VIEW命令 |
|
D. |
DROP INDEX命令 |
18. |
对于学生—选课—课程的三个关系S(S#,SNAME,SEX,AGE) SC(S#,C#,GRADE) C(C#,CNAME,TEACHER) 为了考虑安全性,每个教师只能存取自己讲授的课程的学生成绩,应创建( A )。(选择一项) |
|
|
|
|
|
A. |
视图 |
|
B. |
索引 |
|
C. |
游标 |
|
D. |
表 |
19. |
下列关于关系数据库视图的说法中,哪些是错误的( A )(选择一项) |
|
|
|
|
|
A. |
视图是关系数据库三级模式中的内模式。 |
|
B. |
视图能够对机密数据库提供一定的安全保护。 |
|
C. |
视图对重构数据库提供了一定程度的逻辑独立性 |
|
D. |
对视图的一切操作最终都要转换为对基本表的操作 |
20. |
数据库的并发操作可能带来的问题包括( B )。(选择一项) |
|
|
|
|
|
A. |
非法用户的使用 |
|
B. |
丢失更新 |
|
C. |
数据独立性会提高 |
|
D. |
增加数据冗余度 |
21. |
在oracle中获取前10条的关键字是( D )。(选择一项) |
|
|
|
|
|
A. |
Top |
|
B. |
Limit |
|
C. |
First |
|
D. |
Rownum |
22.
|
Oracle中,有一个名为seq的序列对象,以下语句能返回序列值但不会引起序列值增加的是( C )。(选择一项) |
|
|
|
|
|
A. |
select seq.ROWNUM from dual; |
|
B. |
select seq.ROWID from dual; |
|
C. |
select seq.CURRVAL from dual; |
|
D. |
select seq.NEXTVAL from dual; |
23. |
下面对序列venseq修改的语句,错误的是( A )。(选择一项) |
|
|
|
|
|
A. |
ALTER SEQUENCE venseq START WITH 1 |
|
B. |
ALTER SEQUENCE venseq MAXVALUE 90 |
|
C. |
ALTER SEQUENCE venseq NOMINVALUE |
|
D. |
ALTER SEQUENCE venseq NOCACHE |
三、 判断题
- 唯一性约束条件的字段允许出现空值,但是最多只能是一个空值。( F )
- 可增加或删除约束,也可以直接修改。( F )
- 序列是oracle专有的对象,它用来产生一个自动递增的数列。( T )
- 索引的作用:在数据库中用来加速对表的查询,通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O。( T )
- 索引数据不会占用存储空间。( F )
- 索引改善检索操作的性能,但降低数据插入、修改和删除的性能。在执行这些操作时,DBMS必须动态地更新索引。( T )
- 删掉视图不会导致数据丢失,因为视图是基于数据库表的一个查询。( T )
- 改变基本表的数据,不会反应到基于该表的视图上。( F )
- 视图可以基于一个表、多个表,甚至是基于其他的视图。( T )
- Rollback表示事务不成功的结束,此时告诉系统,已发生错误,数据库可能处在不正确的状态,该事务对数据库的更新必须被撤销,数据库应恢复该事务到初始状态。每个Rollback语句同时也是另一个事务的开始。( T )
- 范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。( T )
- 范式越高,设计质量越高,在现实设计中也越难实现。一般数据库设计,只要达到第二范式,即可避免异常的出现。( F )
- 第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关。( T )
- 范式的优点有:结构合理、冗余较小、尽量避免插入删除修改异常、执行效率非常高。( F )
- 特定表的的设计可以违反第三范式,增加冗余提高性能。( T )
- 数据库表之间的关系包括:一对一、一对多、多对多。( T )
四、 编码题
- 某教学数据库有三个表:
学生表S:SNO (学生编号),SNAME(学生姓名),SAGE(年龄),SSEX(性别),SDEPT(院系));
学习表SC:SNO(学生编号),CNO(课程编号),GRADE(年级));
课程关系C:CNO(课程编号),CNAME(课程名称),CDEPT(院系);
1) 用SQL语句完成下列查询(比较):
a) 查所有年龄在20岁以下的学生姓名及年龄:
SELECT Sname,Sage FROM S WHERE Sage<20; |
b) 查考试成绩有不及格的学生的学号:
SELECT DISTINCT Sno FROM SC WHERE grade<60; |
2) 用SQL语句完成下列查询(确定范围):
查所年龄在20至23岁之间的学生姓名、系别及年龄:
SELECT Sname,Sdept,Sage FROM S WHERE Sage BETWEEN 20 AND 23; |
3) 用SQL语句完成下列查询(确定集合 ):
a) 查计算机系、数学系、信息系的学生姓名、性别:
SELECT Sname,Ssex FROM S WHERE Sdept IN (’CS’,‘IS’,‘MATH’); |
b) 查既不是计算机系、数学系、又不是信息系的学生姓名、性别:
SELECT Sname,Ssex FROM S WHERE Sdept NOT IN (’CS’, ‘IS’, ‘MATH’); |
4) 用SQL语句完成下列查询(字符匹配):
a) 查所有姓“刘”的学生的姓名、学号和性别:
SELECT Sname,Sno,Ssex FROM S WHERE Sname LIKE ‘刘%’; |
b) 查姓“上官”且全名为3个汉字的学生姓名:
SELECT Sname FROM S WHERE Sname LIKE ‘上官_’; |
c) 查所有不姓“张”的学生的姓名:
SELECT Sname,Sno,Ssex FROM S WHERE Sname NOT LIKE ‘张%’; |
d) 查DB_Design课程的课程号:
SELECT Cno FROM CWHERE Cname LIKE ‘DB_Design’ ESCAPE ‘’; |
5) 用SQL语句完成下列查询(涉及空值的查询):
a) 查缺考的学生的学号和课程号:
SELECT Sno,Cno FROM SC WHERE Grade IS NULL; |
b) 查年龄为空值的学生的学号和姓名:
SELECT Sno,Sname FROM S WHERE Sage IS NULL; |
6) 用SQL语句完成下列查询(多重条件查询):
a) 查计算机系20岁以下的学生的学号和姓名:
SELECT Sno,Sname FROM S WHERE Sdept=‘CS’ AND Sage<20; |
b) 查计算机系、数学系、信息系的学生姓名、性别:
SELECT Sname,Ssex FROM S WHERE Sdept =’CS’ OR Sdept =‘IS’ OR Sdept =’MATH’; |
7) 用SQL语句完成下列查询(对查询结果排序):
a) 查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列:
SELECT Sno,Grade FROM SC WHERE Cno=‘C3’ORDER BY Grade DESC; |
b) 查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列:
SELECT * FROM S ORDER BY Sdep,Sage DESC; |
8) 用SQL语句完成下列查询(聚合函数的使用):
a) 查询学生总人数:
SELECT COUNT(*) FROM S; |
b) 查询选修了课程的学生人数:
SELECT COUNT(DISTINCT Sno) FROM SC; |
c) 计算选修了C1课程的学生平均成绩:
SELECT AVG(Grade) FROM SC WHERE Cno=‘C1’; |
d) 查询学习C3课程的学生最高分数:
SELECT MAX(Grade) FROM SC WHERE Cno=‘C3’; |
9) 用SQL语句完成下列查询(对查询结果分组):
a) 查询各个课程号与相应的选课人数:
SELECT Cno,COUNT(Sno)FROM SC GROUP BY Cno; |
b) 查询计算机系选修了3门以上课程的学生的学号:
SELECT Sno FROM SC WHERE Sdept=‘CS’ GROUP BY Sno HAVING COUNT(*)>3; |
c) 求基本表S中男同学的每一年级组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列:
SELECT Sage,COUNT(Sno)FROM S WHERE Ssex='M'GROUP BY Sage HAVING COUNT(*)> 50 ORDER BY 2,Sage DESC; |
10) 用SQL语句完成下列查询(多表联接查询):
a) 查询每个学生及其选修课程的情况:
SELECT S.Sno,Sname,Sage,Ssex,Sdept,Cno,Grade FROM S, SC WHERE S.Sno=SC.Sno; |
b) 查询选修了C2课程且成绩在90分以上的所有学生:
SELECT S.Sno,Sname FROM S,SC WHERE S.Sno=SC.Sno AND SC.Cno=‘C2’ AND SC.Grade > 90; |
c) 查询每个学生选修的课程名及其成绩:
SELECT S.Sno,Sname,Cname,SC.Grade FROM S,SC,C WHERE S.Sno=SC.Sno AND SC.Cno=C.Cno; |
d) 统计每一年龄选修课程的学生人数:
SELECT Sage,COUNT(DISTINCT S.Sno)FROM S,SC WHERE S.Sno=SC.Sno GROUP BY Sage; |
11) 用SQL语句完成下列查询(多表嵌套查询-带有IN谓词的子查询):
a) 查询选修了C2课程的学生姓名:
SELECT Sname FROM S WHERE Sno IN ( SELECT Sno FROM SC WHERE Cno=‘C2’); |
b) 查询与“张三”在同一个系学习的学生学号、姓名和系别:
SELECT Sno,Sname,Sdept FROM S WHERE Sdept IN (SELECT Sdept FROM S WHERE Sname=‘张三’); |
c) 查询选修课程名为“数据库”的学生学号和姓名:
SELECT Sno,Sname FROM S WHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN(SELECT Cno FROM C WHERE Cname='DB')); |
- 2. (可选题)订货管理数据库,有四个表:
仓库表:仓库号,面积,城市;
供应商表:供应商号,地址;
订购单表:订货单号,供应商号,职工号,订货日期, 总金额;
职工表:职工号,仓库号,工资;
用SQL语句完成下列操作:
1) 查询订货管理数据库中数据的仓库号、城市、供应商名和地址信息:
方法一:使用简单连接格式。
SELECT 仓库.仓库号,城市,供应商名,地址 FROM 供应商,订购单,职工,仓库 WHERE 供应商.供应商号=订购单.供应商号 AND订购单.职工号=职工.职工号 AND 职工.仓库号=仓库.仓库号; |
方法二:使用超连接的内部连接格式(注意连接条件的顺序)。
SELECT 仓库.仓库号,城市,供应商名,地址 FROM 供应商 JOIN 订购单 ON 供应商.供应商号=订购单.供应商号 JOIN 职工 ON 订购单.职工号=职工.职工号 JOIN 仓库 ON 职工.仓库号=仓库.仓库号 ; |
2) 检索在北京的供应商的名称:
SELECT 供应商名 FROM 供应商 WHERE 地址 LIKE ‘%北京%’; |
3) 检索出向供应商S3发过订购单的职工的职工号和仓库号:
方法一(嵌套查询):
SELECT 职工号,仓库号 FROM 职工 WHERE 职工号 IN (SELECT 职工号 FROM 订购单 WHERE 供应商号='S3'); |
方法二(连接查询):
SELECT 职工.职工号,仓库号 FROM 职工,订购单 WHERE 职工.职工号=订购单.职工号 AND 供应商号='S3'; |
4) 检索出和职工E1、E3都有联系的北京的供应商信息:
SELECT * FROM 供应商 WHERE 地址 LIKE ‘%北京%’ AND 供应商号 IN (SELECT 供应商号 FROM 订购单 WHERE 职工号=’E1’) AND 供应商号 IN (SELECT 供应商号 FROM 订购单 WHERE 职工号=’E3’); |
5) 检索出向S4供应商发出订购单的仓库所在的城市:
SELECT 城市 FROM 仓库,职工,订购单 WHERE 仓库.仓库号=职工.仓库号 AND 职工.职工号=订购单.职工号 AND 供应商号=’S4’; |
6) 检索出由工资多于1230元的职工向北京的供应商发出的订购单号:
SELECT 订货单号 FROM 职工,订购单,供应商 WHERE 职工.职工号=订购单.职工号AND 订购单.供应商号=供应商.供应商号 AND 工资>1230 AND 地址 LIKE ‘%北京%’; |
7) 检索出所有仓库的平均面积:
SELECT AVG(面积) AS 面积 FROM 仓库; |
8) 检索出每个仓库中工资多于1220元的职工个数:
SELECT 仓库号,COUNT(*) 职工个数 FROM 职工 WHERE 工资>1220 GROUP BY 仓库号; |
9) 检索工资低于本仓库平均工资的职工信息:
SELECT * FROM 职工 AA WHERE 工资<(SELECT AVG(工资) FROM 职工 BB GROUP BY BB.仓库号); |
10) 列出表订购单中每个职工经手的具有最高总金额的订购单信息:
SELECT 职工号,供应商号,订货单号,总金额 FROM 订购单 WHERE 总金额=(SELECT MAX(总金额) FROM 订购单 GROUP BY 职工号); |