国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL Server 練習題3

2024-08-31 00:49:19
字體:
來源:轉載
供稿:網友

題目3

問題描述:
本題用到下面三個關系表:
card     借書卡。   cno 卡號,name  姓名,class 班級
books    圖書。     bno 書號,bname 書名,author 作者,price 單價,quantity 庫存冊數
borrow   借書記錄。 cno 借書卡號,bno 書號,rdate 還書日期
備注:限定每人每種書只能借一本;庫存冊數隨借書、還書而改變。
要求實現如下15個處理:
  1. 寫出建立borrow表的sql語句,要求定義主碼完整性約束和引用完整性約束。
  2. 找出借書超過5本的讀者,輸出借書卡號及所借圖書冊數。
  3. 查詢借閱了"水滸"一書的讀者,輸出姓名及班級。
  4. 查詢過期未還圖書,輸出借閱者(卡號)、書號及還書日期。
  5. 查詢書名包括"網絡"關鍵詞的圖書,輸出書號、書名、作者。
  6. 查詢現有圖書中價格最高的圖書,輸出書名及作者。
  7. 查詢當前借了"計算方法"但沒有借"計算方法習題集"的讀者,輸出其借書卡號,并按卡號降序排序輸出。
  8. 將"c01"班同學所借圖書的還期都延長一周。
  9. 從books表中刪除當前無人借閱的圖書記錄。
  10.如果經常按書名查詢圖書信息,請建立合適的索引。
  11.在borrow表上建立一個觸發器,完成如下功能:如果讀者借閱的書名是"數據庫技術及應用",就將該讀者的借閱記錄保存在borrow_save表中(注orrow_save表結構同borrow表)。
  12.建立一個視圖,顯示"力01"班學生的借書信息(只要求顯示姓名和書名)。
  13.查詢當前同時借有"計算方法"和"組合數學"兩本書的讀者,輸出其借書卡號,并按卡號升序排序輸出。
  14.假定在建books表時沒有定義主碼,寫出為books表追加定義主碼的語句。
  15.對card表做如下修改:
    a. 將name最大列寬增加到10個字符(假定原為6個字符)。
    b. 為該表增加1列name(系名),可變長,最大20個字符。


1. 寫出建立borrow表的sql語句,要求定義主碼完整性約束和引用完整性約束
--實現代碼:
create table borrow(
    cno int foreign key references card(cno),
    bno int foreign key references books(bno),
    rdate datetime,
    primary key(cno,bno))

2. 找出借書超過5本的讀者,輸出借書卡號及所借圖書冊數
--實現代碼:
select cno,借圖書冊數=count(*)
from borrow
group by cno
having count(*)>5

3. 查詢借閱了"水滸"一書的讀者,輸出姓名及班級
--實現代碼:
select * from card c
where exists(
    select * from borrow a,books b
    where a.bno=b.bno
        and b.bname=n'水滸'
        and a.cno=c.cno)

4. 查詢過期未還圖書,輸出借閱者(卡號)、書號及還書日期
--實現代碼:
select * from borrow
where rdate<getdate()

5. 查詢書名包括"網絡"關鍵詞的圖書,輸出書號、書名、作者
--實現代碼:
select bno,bname,author from books
where bname like n'%網絡%'

6. 查詢現有圖書中價格最高的圖書,輸出書名及作者
--實現代碼:
select bno,bname,author from books
where price=(
    select max(price) from books)

7. 查詢當前借了"計算方法"但沒有借"計算方法習題集"的讀者,輸出其借書卡號,并按卡號降序排序輸出
--實現代碼:
select a.cno
from borrow a,books b
where a.bno=b.bno and b.bname=n'計算方法'
    and not exists(
        select * from borrow aa,books bb
        where aa.bno=bb.bno
            and bb.bname=n'計算方法習題集'
            and aa.cno=a.cno)
order by a.cno desc

8. 將"c01"班同學所借圖書的還期都延長一周
--實現代碼:
update b set rdate=dateadd(day,7,b.rdate)
from card a,borrow b
where a.cno=b.cno
    and a.class=n'c01'

9. 從books表中刪除當前無人借閱的圖書記錄
--實現代碼:
delete a from books a
where not exists(
    select * from borrow
    where bno=a.bno)

10. 如果經常按書名查詢圖書信息,請建立合適的索引
--實現代碼:
create clustered index idx_books_bname on books(bname)

11. 在borrow表上建立一個觸發器,完成如下功能:如果讀者借閱的書名是"數據庫技術及應用",就將該讀者的借閱記錄保存在borrow_save表中(注orrow_save表結構同borrow表)
--實現代碼:
create trigger tr_save on borrow
for insert,update
as
if @@rowcount>0
insert borrow_save select i.*
from inserted i,books b
where i.bno=b.bno
    and b.bname=n'數據庫技術及應用'

12. 建立一個視圖,顯示"力01"班學生的借書信息(只要求顯示姓名和書名)
--實現代碼:
create view v_view
as
select a.name,b.bname
from borrow ab,card a,books b
where ab.cno=a.cno
    and ab.bno=b.bno
    and a.class=n'力01'

13. 查詢當前同時借有"計算方法"和"組合數學"兩本書的讀者,輸出其借書卡號,并按卡號升序排序輸出
--實現代碼:
select a.cno
from borrow a,books b
where a.bno=b.bno
    and b.bname in(n'計算方法',n'組合數學')
group by a.cno
having count(*)=2
order by a.cno desc

14. 假定在建books表時沒有定義主碼,寫出為books表追加定義主碼的語句
--實現代碼:
alter table books add primary key(bno)

15.1 將name最大列寬增加到10個字符(假定原為6個字符)
--實現代碼:
alter table card alter column name varchar(10)

15.2 為該表增加1列name(系名),可變長,最大20個字符
--實現代碼:
alter table card add 系名 varchar(20)


 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇明县| 崇明县| 鄂托克前旗| 张北县| 眉山市| 漯河市| 道真| 永定县| 大荔县| 新田县| 武夷山市| 县级市| 耒阳市| 沙洋县| 维西| 介休市| 延边| 呼伦贝尔市| 宁蒗| 巩义市| 定南县| 达拉特旗| 牙克石市| 翁源县| 磴口县| 海兴县| 绥江县| 杭锦旗| 龙泉市| 平和县| 隆安县| 建始县| 田阳县| 大荔县| 厦门市| 辽宁省| 凌云县| 昌平区| 高青县| 龙海市| 香格里拉县|