sql语句查询(图书借阅)

数据库,BOOK,

表1:stuent ; 字段 stuID (学生编号), stuName(姓名), major(专业)

表2:book ;字段 Bid (图书编号) title (书名),autor(作者)

表3:borrow:字段borrowID(结束编号),stuID(学生编号),BID(图书编号), T_time (结束日期),B_time(还书日期)

题目:

1,查询所有借过书的学生编号,姓名,专业,?

2,借书但是未归还的学生姓名及该生未归还书的图书数量?

3,比如书名是《天龙八部》,请分别查询借过它的人的姓名,借书日期,看了多少天,要考虑若某人借了但是没还,则在看了多久一栏填上(尚未归还)

可以每个题目有多种查询方案,最好有,

请详细分析你的思路,以及哪一种比较优越,在查询性能方面或其他方面比较,

另外请兄台谨慎提交你的答案,不要误人子弟!

有劳各位解答!多谢!
百度全部分都在这里啦,
清家当产了啊,大恩不言谢啊,

第1个回答  2009-10-13
1. 借书学生的学生编号会出现在borrow表里面。
select stuID,stuName,major
from student
where stuID in
(
select stuID from borrow
)

2. 未规还的记录B_time字段应该是NULL值。
select stuname,count(*) as 借书数量
from student as a join borrow as b
on a.stuid=b.stuid
where b.B_time is NULL
group by b.stuid,a.stuname

3. select stuname,T_time,
(case when B_time is null then '尚未归还' else cast(datediff(day,T_time,B_time) as varchar(5)) end) as 借阅天数
from student a join borrow b
on a.stuid=b.stuid
join book c
on b.bookid=c.bookid
where bookname='天龙八部'

我自己测试过,符合要求,你再看看,希望对你有帮助,互相学习~本回答被提问者采纳
第2个回答  2009-10-13
--1
SELECT stuID,stuName, major FROM STUENT
WHERE STUID IN (SELECT STUID FROM borrow)
--1_1
SELECT A.stuID,A.stuName, A.major FROM STUENT A,borrow B
WHERE A.STUID=B.STUID
--2
borrow:字段borrowID(结束编号),stuID(学生编号),BID(图书编号), T_time (结束日期),B_time(还书日期)
SELECT A.stuName, COUNT(BID) AS 图书数量 FROM STUENT A,borrow B
WHERE A.STUID=B.STUID AND GETDATE()>=B.B_TIME)
GROUP BY A.stuName
--3
SELECT A.stuName, B.T_TIME,(case b_time is null when then
DAY(B.B_TIME-T_TIME)
else '尚未归还'
end) AS 看书天数 FROM STUENT A,borrow B,BOOK C
WHERE A.STUID=B.STUID AND B.BID=C.BID
AND C.TITLE='《天龙八部》'
相似回答