作者smalldulan (妈妈咪阿)
看板Examination
标题[考题] 100普考资料处理
时间Fri Jun 21 21:44:20 2013
[考题] 国考历届考题与考题观念讨论(书里看到的选这个)请附上想法、出处
五、假设某图书馆之关联资料库中有七个关联资料表,其资料纲要(data schema)如下,
底线代表主要键。
BOOK(BookId, Title, PublisherName)
BOOK_AUTHORS(BookId, AuthorName)
PUBLISHER(Name, Address, Phone)
BOOK_COPIES(BookId, BranchId, No_Of_Copies)
BOOK_LOANS(BookId, BranchId, CardNo, DataOut, DueDate)
LIBRARY_BRANCH(BranchId, BranchName, Address)
BORROWER(CardNo, Name, Address, Phone)
写出以下查询之 SQL:(40分)
(一)该图书馆的所有分馆各拥有多少本书名为“三国演义”的书?
(二)现在那些借阅人在各分馆借出“三国演义”这本书?
(三)现在那些借阅人在各分馆有逾期未还的书?
(四)该图书馆拥有多少不同的书籍?
这题小弟在对某补习班的答案时发现补习班的答案跟我的有很大的落差
不知道是小弟我自己观念不清楚还是补习班答案错了,所以PO上来与各位
高手们讨论~希望各位高手们赐教~谢谢~
以下是小弟的写法:
------------------------------------------------------------------
(一) SELECT LI.BookId,LI.BranchName,No_Of_Copies
FROM BOOK,BOOK_COPIES AS CP,LIBRARY_BRANCH AS LI
WHERE BOOK.BookId=CP.BookId AND
CP.BranchId=LI_BRANCH.BranchId AND
Title="三国演义"
GROUP BY LI.BranchId,LI.BranchName;
[注]假设No_Of_Copies是重复书的数量
(二) SELECT DISTINCT CardNo,Name
FROM BOOK,BOOK_LOANS,BORROWER
WHERE BOOK.BookId=BOOK_LOANS.BookId AND
BOOK_LOANS.CardNo=BORRPW.CardNo AND
Title="三国演义";
[注]假设可能有借阅者在不同分馆借阅相同的书
(三) 此小题使用SQL SERVER语法查询:
SELECT CardNo,Name
FROM BOOK_LOANS,BORROWER
WHERE BOOK_LOANS.CardNo=BORROWER.CardNo AND
GETDATE() > DueDate;
(四) SELECT COUNT(BookId)
FROM BOOK_COPIES;
[注]假设1.不同的书会有不同的BookId
假设2.可能有书图书馆没有收藏但把书的资料先建到资料库中
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 120.114.181.74
1F:推 asdd:看起来大致都没问题 只是为什麽最後一题要选BOOK_COPIES? 06/21 22:02
2F:推 asdd:其实老师讲义有类似题 第一题是写SUM(No_Of_Copies) 06/21 22:07
3F:→ asdd:但是我觉得应该不用加看法跟你一样 补充一下那题是96高考三 06/21 22:09
※ 编辑: smalldulan 来自: 111.242.170.165 (06/21 22:19)
4F:→ smalldulan:我是假设可能有书的资料有在资料库中但图书馆中并没有 06/21 22:23
5F:→ smalldulan:收藏此书 06/21 22:23
※ 编辑: smalldulan 来自: 111.242.170.165 (06/21 22:25)
6F:推 ARCHERDEVIL:二)这样写要预设不同馆相同书名的ID不一样吧? 06/21 22:26
7F:→ ARCHERDEVIL:假设相同书名不同馆的话你用distinct会少列 06/21 22:27
8F:→ ARCHERDEVIL:应该是这样吧? 06/21 22:27
9F:推 ARCHERDEVIL:然後(四)要用书名区分吧?不同馆相同书名算一种书... 06/21 22:31
10F:→ ARCHERDEVIL:如果依照你现在的写法,不同馆相同书名会全部分开计算 06/21 22:32
11F:→ ARCHERDEVIL:结果相同的书籍也会被认为是不同书籍 06/21 22:33
12F:推 asdd:第二题应该是少一个LIBRARY_BRANCH的table 06/21 22:37
13F:推 ARCHERDEVIL:楼上没错 然後我写会把distinct拿掉换group by 06/21 22:40
14F:推 malowda:四要用BOOK不可以用BOOK_COPIES如果某本没COPY就不会出现 06/21 22:40
15F:→ ARCHERDEVIL:针对卡号 人名 分馆来做分类 06/21 22:40
16F:→ malowda:这样就少算了 06/21 22:40
17F:→ malowda:二分馆也要进来不同分馆会有不同人借三国都要算进去 06/21 22:44
18F:→ malowda:没注意看二这样可以不用分馆 06/21 22:47
19F:推 ARCHERDEVIL:分馆是copy的部份主键 加进去比较好吧 顶多就是跑慢点 06/21 22:52
20F:→ ARCHERDEVIL:写错 不是copy 我是说loans table的 抱歉 06/21 22:54
21F:→ smalldulan:没考上就只能半工半读了~ 06/21 22:57
22F:推 asdd:以上推文的都要上 大家一起加油 XD~~ 06/21 22:59
23F:推 ARCHERDEVIL:别未战先怯阿!加油! 06/21 23:03
24F:→ smalldulan:嗯嗯~大家一起加油!! 06/21 23:04