Oracle测试题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle试题
(数据库技术及应用)
学号姓名分数(一) 按照题意写出SQL语句(45分每题3分)
本题用到下面三个关系表:
借书卡card(cno卡号,name姓名,class班级)
图书books(bno书号,bname书名,author作者,price 单价,quantity库存册数) 借书记录borrow (cno借书卡号,bno书号,rdate还书日期)
注:限定每人每种书只能借一本;库存册数随借书、还书而改变。
1.写出建立borrow表的SQL语句,要求定义主码完整性约束和引用完整性约束。create table card
(cno char(6) primary key,
name varchar2(10),
class varchar2(12)
);
create table books
(bno char(8) primary key,
bname varchar2(50),
author varchar2(10),
price number(5,3),
quantity number(4)
);
create table borrow
(cno char(6) references card(cno) on delete cascade,
bno char(8) references books(bno) on delete cascade,
rdate date,
primary key(cno,bno)
);
2.找出借书超过5本的读者,输出借书卡号及所借图书册数。
select cno,count(*) 册数
from borrow
group by cno
having count(*)>5;
3.查询借阅了“水浒”一书的读者,输出姓名及班级。
select name,class
from card
where cno in (
select cno
from borrow
where bno=(
select bno
from books
where bname='水浒'
)
)
;
4.查询过期未还图书,输出借阅者(卡号)、书号及还书日期。
select o,bno,rdate
from card c,borrow b
where o=o and b.rdate 5.查询书名包括“网络”关键词的图书,输出书号、书名、作者。 select bno,bname,author from books where bname like '%网络%'; 6.查询现有图书中价格最高的图书,输出书名及作者。 select bname,author from books where price in ( select max(price) from books ) ; 7.查询当前借了“计算方法”但没有借“计算方法习题集”的读者,输出其借书卡号,并按卡号降序排序输出。 select cno from borrow where bno=( select bno from books where bname='计算方法' ) and bno not in ( select bno from books where bname='计算机方法习题集' ) order by cno desc ; 8.将“c01”班同学所借图书的还期都延长一周。 update borrow set rdate=rdate+7 where cno in ( select cno from card where class='c01' ) ; commit ; 9.从books表中删除当前无人借阅的图书记录。 from books where bno not in ( select bno from borrow ) ; 10.如果经常按书名查询图书信息,请建立合适的索引。 create index bname_idx on books(bname); 11.在borrow表上建立一个触发器,完成如下功能:如果读者借阅的书名是“数据库技术及应用”,就将该读者的借阅记录保存在borrow_save表中(注:borrow_save表结构同borrow表)。 create table borrow_save as (select * from borrow) ; delete borrow_save; commit; create or replace trigger borrow_in after insert on borrow for each row declare s books.bno%type; begin select bno into s from books where bname='数据库技术及应用'; if s=:new.bno then insert into borrow_save values (:o,:new.bno,:new.rdate); end if; end; / 12.建立一个视图,显示“力01”班学生的借书信息(只要求显示姓名和书名)。create view ca_view as (select name,bno from card c,borrow b where o=b.bno and c.class='力01' ); 13.查询当前同时借有“计算方法”和“组合数学”两本书的读者,输出其借书卡号,并按卡号升序排序输出。 (select cno from borrow where bno=( select bno from books where bname='计算方法' ))