SQL面试笔试经典题(Part 2)
本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记.
参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.html
01 问题描述
本题用到下面三个关系表:
借书卡:card
| cno | name | class | 
| 卡号 | 姓名 | 班级 | 
图书:books
| bno | bname | author | price | quantity | 
| 书号 | 书名 | 作者 | 单价 | 库存册数 | 
借书记录:borrow
| cno | bno | rdate | 
| 借书卡号 | 书号 | 还书日期 | 
备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。
02 问题及SQL实现
1、写出建立card,books,borrow表的SQL语句,要求定义表borrow的主码完整性约束和引用完整性约束
drop table if exists books;
create table books (
bno int(11) auto_increment ,
bname varchar(30) default null,
author varchar(30) default null,
price float(6,2) default null,
quantity int(11) default null,
primary key (bno)
) engine=innodb default charset=utf8; drop table if exists card;
create table card (
cno int(11) auto_increment,
name varchar(30) default null,
class varchar(30) default null,
primary key (cno)
) engine=innodb default charset=utf8; drop table if exists borrow;
create table borrow (
cno int(11) not null,
bno int(11) not null,
rdate datetime null default current_timestamp,
primary key (cno,bno),
key bno (bno),
constraint bno foreign key (bno) references books (bno),
constraint cno foreign key (cno) references card (cno)
) engine=innodb default charset=utf8;
插入测试数据:
 insert into card(name,class) values('张三','计科一班');
 insert into card(name,class) values('李四','计科一班');
 insert into card(name,class) values('王五','计科二班');
 insert into card(name,class) values('六四','计科二班');
 insert into card(name,class) values('七七','软工一班');
 insert into card(name,class) values('粑粑','软工二班');
 insert into books(bname,author,price,quantity) values ('水浒','施耐庵',188,3);
 insert into books(bname,author,price,quantity) values ('计算机网络','谢希仁',49,3);
 insert into books(bname,author,price,quantity) values ('计算方法','严蔚敏',58,3);
 insert into books(bname,author,price,quantity) values ('计算方法习题集','殷人昆',188,3);
 insert into books(bname,author,price,quantity) values ('数据库技术及应用','王珊',38,3);
 insert into books(bname,author,price,quantity) values ('组合数学','周伟',28,3);
 insert into books(bname,author,price,quantity) values ('redis初探','周成龙',25,3);
 insert into borrow(cno,bno) values(1,1);
 insert into borrow(cno,bno) values(2,1);
 insert into borrow(cno,bno) values(3,1);
 insert into borrow(cno,bno) values(4,3);
 insert into borrow(cno,bno) values(4,6);
 insert into borrow(cno,bno) values(5,6);
 insert into borrow(cno,bno) values(2,7);
2、找出借书多于1本的读者,输出借书卡号及所借图书册数

select cno as "卡号",count(*) as "借书册数"
from borrow
group by cno
having count(cno)>1;
3、查询借阅了"水浒"一书的读者,输出姓名及班级

select c.name as "姓名",c.class as "班级"
from card c
where c.cno in
(
select br.cno from borrow br join books bs
on br.bno = bs.bno and bs.bname="水浒"
);
4、查询过期未还图书,输出借阅者(卡号)、书号及还书日期

select cno as "卡号",bno as "书号",rdate as "还书日期"
from borrow
where rdate< now();
5、查询书名包括"网络"关键词的图书,输出书号、书名、作者

select bno,bname,author from books where bname like "%网络%";
6、查询现有图书中价格最高的图书,输出书名及作者

select bname,author
from books
where price = (select max(price) from books);
7、查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出

select bo.cno
from borrow bo, books
where bo.bno = books.bno and books.bname ="计算方法" and not exists
(
select * from borrow r,books b where r.bno = b.bno and b.bname="计算方法习题集"
)
order by bo.cno desc;
8、将"计科一班"班同学所借图书的还期都延长一周

update borrow set rdate=adddate(rdate,INTERVAL 7 day)
where cno in (select cno from card where class="计科一班");
9、从books表中删除当前无人借阅的图书记录

delete from books where bno not in
(select distinct bno from borrow );
这里有3本图书被删除,只剩下1、3、6、7,执行删除操作后重新插入books表的原始数据以便做后面的题目。
10、如果经常按书名查询图书信息,请建立合适的索引
create index idx_books_name on books(bname);
--关于索引的使用参考:
--https://zhidao.baidu.com/question/492877300.html
11、在borrow表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在borrow_save表中(注borrow_save表结构同borrow表)
create view v_borrow
as
select c.name,b.bname
from card c,books b,borrow r
where c.cno=r.cno and b.bno=r.bno and c.class="计科一班";
12、查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出

select b.cno
from borrow b
where b.bno in (select bno from books where bname in ("计算方法","组合数学"))
group by b.cno
having count(b.bno)=2
order by b.cno ;
13、假定在建books表时没有定义主键,写出为books表追加定义主键的语句
alter table books add primary key (bno);
14、为card表增加1列deptname(系名),可变长,最大50个字符
alter table card add deptname varchar(50);
THE END.
SQL面试笔试经典题(Part 2)的更多相关文章
- SQL面试笔试经典题(Part 1)
		本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记,持续更新... 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.htm ... 
- JAVA面试/笔试经典题
		1.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时 ... 
- 《PHP面试笔试真题库》——PHP面试的好帮手
		你好,是我琉忆. 一个文艺的PHP开发工程师. 很荣幸能够在这里带来我的第一本新书--<PHP程序员面试笔试真题库>. 一.创作过程 <PHP 程序员面试笔试真题库>是我的第三 ... 
- 《PHP程序员面试笔试真题解析》——新书上线
		你好,是我--琉忆.很高兴可以跟你分享我的新书. 很高兴,在出版了PHP程序员面试笔试宝典后迎来了我的第二本书出版--<PHP程序员面试笔试真题解析>. 如果你是一个热爱PHP的程序员,刚 ... 
- BAT面试笔试33题:JavaList、Java Map等经典面试题!答案汇总!
		JavaList面试题汇总 1.List集合:ArrayList.LinkedList.Vector等. 2.Vector是List接口下线程安全的集合. 3.List是有序的. 4.ArrayLis ... 
- unity,C#,游戏面试笔试真题
		最开始的两家公司笔试面试题目 一家公司是学校聘请研究教育方面VR课件的公司,面试没几天,就收到了面试通过的消息,后面因为通过了另一家游戏公司而拒绝了. 另一家公司是一家游戏外企,在春熙路,当时笔试还可 ... 
- sql练习题及经典题
		https://blog.csdn.net/mrbcy/article/details/68965271 经典例题 19.查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录. S ... 
- 面试&笔试常见题,你了解多少?
		HTML:1. 什么是语义化的HTML?有何意义?为什么要做到语义化?(高频率考题)2. 行内元素和块元素分别有哪些?(高频率)3. 严格模式与混杂模式的区分?如何触发这两种模式?(高频率)4. ... 
- 搜狗面试的经典题(C++map按值排序,class struct的差别)
		一:起因 (1)java Map排序(key,value).请看还有一篇博客 java Map排序 (2)c++ map排序(key,value),能够对c++ map和java Map进行对照:之 ... 
随机推荐
- Azure 上通过 SendGrid 发送邮件
			SendGrid 是什么? SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递. 并且具有可扩充性和实时分析的能力.常见的用例有: 自动回复用户的邮件 定期发送信息给用 ... 
- Entity Framework 6 Recipes 2nd Edition(13-1)译 -> 优化TPT继承模型的查询
			问题 你想提高在一个TPT继承模型里的查询 解决方案 让我们假设有一个简单的TPT继承模型,如图Figure 13-1 Figure 13-1. A simple Table per Type inh ... 
- jquery库和cityselect插 件的省市 级联
			/*$(function(){ $("#select_provice").citySelect({ prov:"北京", nodata:"none&q ... 
- 使用Red Gate Sql Data Compare 数据库同步工具进行SQL Server的两个数据库的数据比较、同步
			Sql Data Compare 是比较两个数据库的数据是否相同.生成同步sql的工具. 这一款工具由Red Gate公司出品,我们熟悉的.NET Reflector就是这个公司推出的,它的SQLTo ... 
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(54)-工作流设计-所有流程监控
			系列目录 先补充一个平面化登陆页面代码,自己更换喜欢的颜色背景 @using Apps.Common; @{ Layout = null; } <!DOCTYPE html> <ht ... 
- Android面试一天一题(1Day)
			写在前面 该博客思路源于在简书看到goeasyway博主写的Android面试一天一题系列,无copy之意,仅为让自己总结知识点,成长一点点.先感谢各位大神的无私分享~! 关于题目,大部分则出自And ... 
- SVN服务器和客户端安装教程
			SVN是什么?有何用? SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁 ... 
- Node学习笔记(三):基于socket.io  web版你画我猜(一)
			经过惨淡的面试,也是知道了自己的不足,刚好最近在学习node,心中便有了做一个web版的你画我猜的想法 首先说下思路,在做准备工作的时候,有两个大概的思路: 1.规定一块div,捕捉鼠标事件,动态生成 ... 
- C# 条件编译
			本文导读: C#的预处理器指令从来不会转化为可执行代码的命令,但是会影响编译过程的各个方面,常用的预处理器指令有#define.#undef.#if,#elif,#else和#endif等等,下面介绍 ... 
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑
			Part 3: 设计逻辑层:核心开发 如前所述,我们的解决方案如下所示: 下面我们讨论整个应用的结构,根据应用中不同组件的逻辑相关性,分离到不同的层中,层与层之间的通讯通过或者不通过限制.分层属于架构 ... 
