参考答案
视图的意义在于两个方面:
1)简化复杂查询。如果需要经常执行某项复杂查询,可以基于这个复杂查询建立视图,此后查询此视图即可。
2)限制数据访问。视图本质上就是一条SELECT语句,所以当访问视图时,只能访问到所对应的SELECT语句中涉及到的列,对基表中的其它列起到安全和保密的作用。
参考答案
创建视图v_emp_salesman的SQL语句如下所示:
create or replace view v_emp_salesman as select empno, ename, sal, deptno from emp where job = 'SALESMAN';
insert into v_emp_salesman values(1234, ‘tina’, 3500, 20);
参考答案
上述SQL语句的运行结果为:基表emp增加了一条记录,但是这条记录在视图中无法查询到。因为新增记录的职位不是salesman,不在视图可见范围内。
A.对复杂视图可以执行插入数据操作
B.为了禁止在视图上执行DML操作,可以在建立视图时设置READ ONLY约束
C.CHECK OPTION约束表示,通过视图所做的修改,必须在视图的可见范围内
D.对视图的操作,最终都会转化成对基本表的操作
参考答案
本题的正确答案为BCD。
选项A说法不正确,复杂视图不允许DML操作。
视图中数据显示的形式如图-1所示。
图-1
参考答案
创建视图v_mgr_salary的SQL语句如下所示:
createorreplaceviewv_mgr_salary as selectm.ename, max(w.sal) max_sal, min(w.sal) min_sal fromempwjoinempm onw.mgr = m.empno groupbym.ename;
A.序列是Oracle提供的可用于产生一系列唯一数字的数据库对象。
B.通常情况下,一个序列为一张表提供主键值,但一个序列也可以为多个表提供主键值。
C.使用序列时,伪列NEXTVAL返回序列生成的下一个值。
D.任何时候都可以使用伪列CURRVAL返回当前序列值。
参考答案
本题的正确答案为ABC。
本题中D选项说法不正确,当序列创建以后,必须先执行一次NEXTVAL,之后才能使用CURRVAL。
有学员表student,表结构如表-1所示:
表-1学员表student信息
1. 创建一个序列stu_seq,初始值是1000,步进是2。
2. 构造SQL语句,向student数据表中插入一条记录,其信息如下:学号使用上一步创建的序列生成,学生姓名为张无忌,生日为1987-11-17,总成绩为639分。
参考答案
各练习的参考答案如下所示:
1.
create sequence stu_seq start with 1000 increment by 2;
2.首先创建student表,创建该表的SQL语句如下所示:
create table student( id NUMBER(4) primary key, nameVARCHAR2(20) not null, birthday DATE, scoreNUMBER(9,2) );
然后使用序列stu_seq为student表的id列生成数据,并执行插入操作,SQL语句如下所示:
insert into student(id, name, birthday, score) values(stu_seq.nextval,'张无忌',to_date('1987-11-17','yyyy-mm-dd'), 639);
参考答案
索引是对表的一列或多列进行排序的结构。因为绝大多数的搜索方法在搜索排序结构时效率都会大大提高,所以如果表中某一列经常被作为关键字搜索,则建议对此列创建索引。
索引提供指针以指向存储在表中指定列的数据值,根据指定的排序次序排列这些指针。数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。
参考答案
创建索引的SQL语句如下所示:
CREATEINDEXemp_ename_upper_idx ONemp(UPPER(ename));
参考答案
适合创建索引的场合为:
1)为经常出现在WHERE子句中的列创建索引。
2)为经常出现在ORDER BY、DISTINCT后面的字段建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致。
3)为经常作为表的连接条件的列上创建索引
不适合创建索引的场合为:
1)不要在经常做DML操作的表上建立索引。
2)不要在小表上建立索引。
3)限制表上的索引数目,索引并不是越多越好。
参考答案
主键的选取原则如下:
1)主键应是对系统无意义的数据。
2)永远也不要更新主键,让主键除了唯一标识一行之外,再无其他的用途。
3)主键不应包含动态变化的数据,如时间戳。
4)主键应自动生成,不要人为干预,以免使它带有除了唯一标识一行以外的意义。
5)主键尽量建立在单列上。
已知学生表student,该表两个字段学号(id)、姓名(name),其中id列为主键列,创建该表的SQL语句如下所示:
create table student( id number(10) primary key, name varchar2(20) );
有课程表course ,该表有两个字段编号(id)、课程名称(name),其中id列为主键列,创建该表的SQL语句如下所示:
create table course( id number(10) primary key, name varchar2(20) );
有选课表sc,该表有三个字段学号(sid)、课程编号(cid)、成绩(score),创建该表的SQL语句如下所示:
create table sc( sid number(10), cid number(10), score number(5,2) );
本案例要求建立下列外键关联关系:
1.sc表的学号列(sid),外键关联学生表(student)的学号列(id)。
2.sc表的课程编号列(cid),外键关联课程表(course)的编号列(id)。
请写出建立上述关联关系的SQL语句。
参考答案
修改表建立外键关联关系的SQL语句如下所示:
1.
alter table sc add constraint sc_sid_student_fk FOREIGN KEY (sid) references student(id);
2.
alter table sc add constraint sc_cid_student_fk FOREIGN KEY (cid) references course(id);
参考答案
外键约束维护数据的一致性。外键约束条件包括两个方面的数据约束:
1)从表上定义的外键的列值,必须从主表被参照的列值中选取,或者为NULL。
2)当主表参照列的值被从表参照时,主表的该行记录不允许被删除。
参考答案
如果在一个频繁DML操作的表上建立外键,每次DML操作,都将导致数据库自动对外键所关联的对应表做检查,产生开销,如果已在程序中控制逻辑,这些判断将增加额外负担,可以省去;外键确定了主从表的先后生成关系,有时会影响业务逻辑。