求助解答下面SQL查询语句

数据组织
图书信息表(BOOKS)
编号 CHAR(15) 主键
书名 VARCHAR(42)
作者 VARCHAR(8)
出版社 VARCHAR(28)
定价 FLOAT
读者信息表(READERS)
编号 CHAR(8) 主键
姓名 CHAR(8)
读者类型 CHAR(8)
已借数量 INT
限借阅数量 INT
借阅期限 INT
借阅信息表(BORROWINF)
读者编号 CHAR(8)
图书编号 CHAR(15)
借期 DATETIME
还期 DATETIME

语句查询
查询某日借书的读者的姓名。
查询至少有两本相同书名的所有图书的信息,包括编号、书名和作者。
查询没有借阅图书的读者姓名。
查询借阅了“教育出版社”图书的读者编号和姓名。
查询书价最低的图书的书名和书价。
按书价从高到低排序,列出图书信息。
将书名相同的图书按定价从高到低显示,列出图书信息。
创建借阅期限(JYQX)视图,含编号、借期、借阅期限、应还日期、还期五个字段,其中应还日期=借期+借阅期限。
给出借阅超期信息单。
查询编号为某某的读者的借阅信息。
定义存储过程,查询某人所借阅的所有图书信息。
定义存储过程,查询某本书的所有借阅信息。
查询书名为某某的图书数量。
定义函数,以书名为参数,返回该书的定价。
分别统计各类型读者的已借数量之和。
将图书表中所有书价下浮10%
分别向图书表、读者表中增加一条记录。
将“学生”类型的读者借阅期限增加10天。
删除借阅信息表中还期在系统日期之前的记录。
分别统计各类读者中借阅数量最多和最少的读者信息。

第1个:select 读者姓名 from readers where 编号 in (
select 读者编号 from borrowinf
where 借期=to_date('20110506','yyyymmdd')
)
第2个:
select * from books where 书名 in
( select 书名 from books
group by 书名having count(*)>1
)
order by 书名,书号
第3个:
select 姓名 from readers where 编号 not in (
select 读者编号 from borrowinf)
第4个:select 编号,姓名 from readers
where 编号 in (
select 读者编号 from borrowinf,books
where borrowinf.图书编号=books.编号 and 出版社='教育出版社'
)

第5个:select 书价,书名 from books where 书价 in
(select min(书价)from books)
第6个:select * from books order by 书价
第7个:create view jyqx as
select a.编号,c.借期,b.借阅期限,c.还期,(c.借期+b.借阅期限) "应还日期" from books a,readers b,
borrowinf c
where a.编号=c.编号and c.读者编号=b.编号
第8个:select * from borrowinf b where b.还期<sysdate
第9个:select * from borrowinf where 读者编号='xxxxx'
第10个:create or replace procedure jys_test(c_name varchar2) is
ast varchar2(500);
begin
ast := 'drop table test';
execute immediate ast;
ast := 'create table test as
select * from books where rownum < 0';
execute immediate ast;
ast:='
insert into test
select *
from books a
where a.图书编号 in
(select c.图书编号 from borrowinf c
where c.读者编号 in
(select b.读者编号 from readers b where b.读者姓名 = '''||c_name||'''))';
execute immediate ast;
end;
先写这么多,明天继续!追问

麻烦只做下 第23579题吧 辛苦了呵呵

追答

不是已经做过了吗?

追问

我看错啦 谢谢哈 虽然有错的 呵呵 后人注意哦

追答

这个与你见表时采用的数据类型有关,不过上面的sql语句我都在oracle里运行过,没有问题
最后那个存储过程有点小毛病,缺少了test表是否存在的判断,其他还算OK吧

追问

不错呵呵 真实 辛苦啦
这最后一个了 分别统计各类读者中借阅数量最多和最少的读者信息 再麻烦下

追答

分别统计各类读者中借阅数量最多和最少的读者信息
select a.* from
(select max(已借数量)over(partition by 读者类型 ),b.* from readers b
union all
select min(已借数量)over(partition by 读者类型 ),b.* from readers b) a
order by a.读者类型

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-06
select 姓名 from READERS where 借期 = '某天'
待续...追问

我做好啦快 还差 最后5题 呵呵

追答

update BOOKS set 定价 = 定价*0.9
insert into BOOKS ('','','',...) insert into READERS ('','','',...) 按字段顺序填值
update READERS set 借阅期限 = 借阅期限 + 10 where 读者类型 = '学生'
delete from BORROWINF where 还期 < getdate()
借阅最多读者
select top 1 R.* from (
select 读者编号,count(1) 借阅次数 from BORROWINF
group by 读者编号) A left join READERS R on A.读者编号 = R.读者编号
order by A.借阅次数 desc
借阅最少读者
select top 1 R.* from (
select 读者编号,count(1) 借阅次数 from BORROWINF
group by 读者编号) A left join READERS R on A.读者编号 = R.读者编号
order by A.借阅次数 asc

相似回答