SQL Server面试题目

  1. 问题描述:   
  2.  本题用到下面三个关系表:   
  3.  CARD 借书卡。 CNO 卡号,NAME 姓名,CLASS 班级   
  4.  BOOKS 图书。 BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数   
  5.  BORROW 借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期   
  6.  备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。   
  7.  要求实现如下15个处理:   
  8.  1 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。   
  9.  2 找出借书超过5本的读者,输出借书卡号及所借图书册数。   
  10.  3 查询借阅了"水浒"一书的读者,输出姓名及班级。   
  11.  4 查询过期未还图书,输出借阅者(卡号)、书号及还书日期。   
  12.  5 查询书名包括"网络"关键词的图书,输出书号、书名、作者。   
  13.  6 查询现有图书中价格最高的图书,输出书名及作者。   
  14.  7 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。   
  15.  8 "C01"班同学所借图书的还期都延长一周。   
  16.  9 BOOKS表中删除当前无人借阅的图书记录。   
  17.  10.如果经常按书名查询图书信息,请建立合适的索引。   
  18.  11.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。   
  19.  12.建立一个视图,显示"01"班学生的借书信息(只要求显示姓名和书名)。   
  20.  13.查询当前同时借有"计算方法""组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。   
  21.  14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句。   
  22.  15.对CARD表做如下修改:   
  23.  a. NAME最大列宽增加到10个字符(假定原为6个字符)。   
  24.  b. 为该表增加1NAME(系名),可变长,最大20个字符。   
  25.     
  26.     
  27.  1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束   
  28.  --实现代码:   
  29.  CREATE TABLE BORROW(   
  30.  CNO int FOREIGN KEY REFERENCES CARD(CNO),   
  31.  BNO int FOREIGN KEY REFERENCES BOOKS(BNO),   
  32.  RDATE datetime,   
  33.  PRIMARY KEY(CNO,BNO))   
  34.     
  35.  2. 找出借书超过5本的读者,输出借书卡号及所借图书册数   
  36.  --实现代码:   
  37.  SELECT CNO,借图书册数=COUNT(*)   
  38.  FROM BORROW   
  39.  GROUP BY CNO   
  40.  HAVING COUNT(*)>5   
  41.     
  42.  3. 查询借阅了"水浒"一书的读者,输出姓名及班级   
  43.  --实现代码:   
  44.  SELECT * FROM CARD c   
  45.  WHERE EXISTS(   
  46.  SELECT * FROM BORROW a,BOOKS b   
  47.  WHERE a.BNO=b.BNO   
  48.  AND b.BNAME=N'水浒'  
  49.  AND a.CNO=c.CNO)   
  50.     
  51.  4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期   
  52.  --实现代码:   
  53.  SELECT * FROM BORROW   
  54.  WHERE RDATE<GETDATE()   
  55.     
  56.  5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者   
  57.  --实现代码:   
  58.  SELECT BNO,BNAME,AUTHOR FROM BOOKS   
  59.  WHERE BNAME LIKE N'%网络%'  
  60.     
  61.  6. 查询现有图书中价格最高的图书,输出书名及作者   
  62.  --实现代码:   
  63.  SELECT BNO,BNAME,AUTHOR FROM BOOKS   
  64.  WHERE PRICE=(   
  65.  SELECT MAX(PRICE) FROM BOOKS)   
  66.     
  67.  7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出   
  68.  --实现代码:   
  69.  SELECT a.CNO   
  70.  FROM BORROW a,BOOKS b   
  71.  WHERE a.BNO=b.BNO AND b.BNAME=N'计算方法'  
  72.  AND NOT EXISTS(   
  73.  SELECT * FROM BORROW aa,BOOKS bb   
  74.  WHERE aa.BNO=bb.BNO   
  75.  AND bb.BNAME=N'计算方法习题集'  
  76.  AND aa.CNO=a.CNO)   
  77.  ORDER BY a.CNO DESC  
  78.     
  79.  8. "C01"班同学所借图书的还期都延长一周   
  80.  --实现代码:   
  81.  UPDATE b SET RDATE=DATEADD(Day,7,b.RDATE)   
  82.  FROM CARD a,BORROW b   
  83.  WHERE a.CNO=b.CNO   
  84.  AND a.CLASS=N'C01'  
  85.     
  86.  9. BOOKS表中删除当前无人借阅的图书记录   
  87.  --实现代码:   
  88.  DELETE A FROM BOOKS a   
  89.  WHERE NOT EXISTS(   
  90.  SELECT * FROM BORROW   
  91.  WHERE BNO=a.BNO)   
  92.     
  93.  10. 如果经常按书名查询图书信息,请建立合适的索引   
  94.  --实现代码:   
  95.  CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)   
  96.     
  97.  11. BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)   
  98.  --实现代码:   
  99.  CREATE TRIGGER TR_SAVE ON BORROW   
  100.  FOR INSERT,UPDATE  
  101.  AS  
  102.  IF @@ROWCOUNT>0   
  103.  INSERT BORROW_SAVE SELECT i.*   
  104.  FROM INSERTED i,BOOKS b   
  105.  WHERE i.BNO=b.BNO   
  106.  AND b.BNAME=N'数据库技术及应用'  
  107.     
  108.  12. 建立一个视图,显示"01"班学生的借书信息(只要求显示姓名和书名)   
  109.  --实现代码:   
  110.  CREATE VIEW V_VIEW   
  111.  AS  
  112.  SELECT a.NAME,b.BNAME   
  113.  FROM BORROW ab,CARD a,BOOKS b   
  114.  WHERE ab.CNO=a.CNO   
  115.  AND ab.BNO=b.BNO   
  116.  AND a.CLASS=N'01'  
  117.     
  118.  13. 查询当前同时借有"计算方法""组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出   
  119.  --实现代码:   
  120.  SELECT a.CNO   
  121.  FROM BORROW a,BOOKS b   
  122.  WHERE a.BNO=b.BNO   
  123.  AND b.BNAME IN(N'计算方法',N'组合数学')   
  124.  GROUP BY a.CNO   
  125.  HAVING COUNT(*)=2   
  126.  ORDER BY a.CNO DESC  
  127.     
  128.  14. 假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句   
  129.  --实现代码:   
  130.  ALTER TABLE BOOKS ADD PRIMARY KEY(BNO)   
  131.     
  132.  15.1 NAME最大列宽增加到10个字符(假定原为6个字符)   
  133.  --实现代码:   
  134.  ALTER TABLE CARD ALTER COLUMN NAME varchar(10)   
  135.     
  136.  15.2 为该表增加1NAME(系名),可变长,最大20个字符   
  137.  --实现代码:   
  138.  ALTER TABLE CARD ADD 系名 varchar(20)  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值