《数据库原理与应用》(第三版) 第7章 索引和视图 基础 习题参考答案
1.索引的作用是什么?
答:索引可以加快數(shù)據(jù)的查詢效率。
2.索引分為哪幾種類型?分別是什么?它們的主要區(qū)別是什么?
答:分為聚集索引和非聚集索引兩種。聚集索引會對數(shù)據(jù)進行物理排序,非聚集索引不對數(shù)據(jù)進行物理排序。
3.在一個表上可以創(chuàng)建幾個聚集索引?可以創(chuàng)建多個非聚集索引嗎?
答:1個聚集索引。可以。
4.聚集索引一定是唯一性索引,對嗎?反之呢?
答:不對。反之也不對。
5.在建立聚集索引時,數(shù)據(jù)庫管理系統(tǒng)是真正將數(shù)據(jù)按聚集索引列進行物理排序。對嗎?
答:對。
6.在建立非聚集索引時,數(shù)據(jù)庫管理系統(tǒng)并不對數(shù)據(jù)進行物理排序。對嗎?
答:對。
7.不管對表進行什么類型的操作,在表上建立的索引越多越能提高操作效率。對嗎?
答:不對。
8.經(jīng)常對表進行哪類操作適合建立索引?適合在哪些列上建立索引?
答:
?返回范圍值的查詢:BETWEEN AND、>、>=、< 和 <= ;
?不返回大型結(jié)果集的查詢。
?經(jīng)常被用作連接的列,一般來說,這些列是外鍵列。
?ORDER BY或GROUP BY操作。
適合建立索引的情況:
?包含大量非重復(fù)值的列。
?在WHERE子句中經(jīng)常用于進行BETWEEN AND、>、>=、< 和 <=等操作的列。
?經(jīng)常被用作連接操作的列。
?ORDER BY或GROUP BY子句中涉及的列。
9.使用第5章建立的Student、Course和SC表,寫出實現(xiàn)下列操作的SQL語句。
(1)在Student表上為Sname列建立一個非聚集索引,索引名為:SnameIdx。
答:Create index SnameIdx on student(Sname)
(2)在Course表上為Cname列建立一個唯一的非聚集索引,索引名為:CNIdx
答:Create unique index CNIdx on Course(Cname)
(3)在SC表上為Sno和Cno建立一個組合的聚集索引,索引名為:SnoCnoIdx。
答:Create clustered index SnoCnoIdx on SC(Sno,Cno)
(4)刪除Sname列上建立的SnoIdx索引。
答:drop index SnoIdx on Student
10.試說明使用視圖的好處。
答:利用視圖可以簡化客戶端的數(shù)據(jù)查詢語句,使用戶能從多角度看待同一數(shù)據(jù),可以提高數(shù)據(jù)的安全性,視圖對應(yīng)數(shù)據(jù)庫三級模式中的外模式,因此提供了一定程度的邏輯獨立性。
答:不對,因為通過視圖查詢數(shù)據(jù)時,比直接針對基本表查詢數(shù)據(jù)多了一個轉(zhuǎn)換過程,即從外模式到模式的轉(zhuǎn)換。
12.使用第5章建立的Student、Course和SC表,寫出創(chuàng)建滿足下述要求的視圖的SQL語句。
(1)查詢學(xué)生的學(xué)號、姓名、所在系、課程號、課程名、課程學(xué)分。
答:Create view v1 As
Select s.sno,sname,sdept,c.cno,cname,credit
From student s join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
(2)查詢學(xué)生的學(xué)號、姓名、選修的課程名和考試成績。
答:Create view v2 As
Select s.sno,sname,cname,grade
From student s join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
(3)統(tǒng)計每個學(xué)生的選課門數(shù),要求列出學(xué)生學(xué)號和選課門數(shù)。
答:Create view v3 As
Select sno,count(*) as total
From sc group by sno
(4)統(tǒng)計每個學(xué)生的修課總學(xué)分,要求列出學(xué)生學(xué)號和總學(xué)分(說明:考試成績大于等于60才可獲得此門課程的學(xué)分)。
答:Create view v4 As
Select sno,sum(credit) as total_credit
From sno join course c on c.cno = sc.cno
Where grade >= 60
Group by sno
13.利用第12題建立的視圖,完成如下查詢:
(1)查詢考試成績大于等于90分的學(xué)生的姓名、課程名和成績。
答:Select sname,cname,grade From v2 where grade >= 90
(2)查詢選課門數(shù)超過3門的學(xué)生的學(xué)號和選課門數(shù)。
答:Select * from v3 where total >= 3
(3)查詢計算機系選課門數(shù)超過3門的學(xué)生的姓名和選課門數(shù)。
答:Select sname,total from v3 join student s on s.sno = v3.sno
Where sdept = ‘計算機系’ and total >= 3
(4)查詢修課總學(xué)分超過10分的學(xué)生的學(xué)號、姓名、所在系和修課總學(xué)分。
答:Select v4.sno,sname,sdept,total_credit
From v4 join student s on s.sno = v4.sno
Where total_credit >= 10
(5)查詢年齡大于等于20歲的學(xué)生中,修課總學(xué)分超過10分的學(xué)生的姓名、年齡、所在系和修課總學(xué)分。
答:Select sname,sage,sdept,total_credit
From v4 join student s on s.sno = v4.sno
Where sage >= 20 and total_credit >= 10
14.修改12題(4)定義的視圖,使其查詢每個學(xué)生的學(xué)號、平均成績以及總的選課門數(shù)。
答: Alter view v4 As
Select sno,avg(grade) as avg_grade,count(*) as total_cno
Group by sno
總結(jié)
以上是生活随笔為你收集整理的《数据库原理与应用》(第三版) 第7章 索引和视图 基础 习题参考答案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《数据库原理与应用》(第三版) 第 6
- 下一篇: 《数据库原理与应用》(第三版) 第8章