现有图书管理数据库的三个关系模式,他们的字段分别如下:
图书表:总编号, 分类号, 书名, 作者, 出版单位, 单价
读者表:借书证号, 单位, 姓名, 性别, 职称, 地址
借阅表:借书证号, 总编号, 借书日期
以上表对应的字段明细如下:
book :
b_no ,b_type ,b_name , b_author ,b_publish ,b_price

reader :
r_no , r_unit , r_name ,r_sex ,r_pro ,r_address

borrow :
r_no , b_no ,b_time

CREATE TABLE book (
	b_no varchar(10),
	b_type varchar(20),
	b_name varchar(20),
	b_author varchar(20),
	b_publish varchar(20),
	b_price decimal(18,2)
);

CREATE TABLE reader (
	r_no varchar(20),
	r_unit varchar(20),
	r_name varchar(20),
	r_sex varchar(20),
	r_pro varchar(20),
	r_address varchar(20) 
);

CREATE TABLE borrow ( 
  r_no varchar(20), 
  b_no varchar(20), 
  b_time datetime
);

INSERT INTO book
VALUES
	( '445501', 'TP3/12', '数据库导论', '王强', '科学出版社', 17.90 );
INSERT INTO book
VALUES
	( '445502', 'TP3/12', '数据库导论', '王强', '科学出版社', 17.90 );
INSERT INTO book
VALUES
	( '445503', 'TP3/12', '数据库导论', '王强', '科学出版社', 17.90 );
INSERT INTO book
VALUES
	( '332211', 'TP5/10', '计算机基础', '李伟', '高等教育出版社', 18.00 );
INSERT INTO book
VALUES
	( '112266', 'TP3/12', 'FoxBASE', '张三', '电子工业出版社', 23.60 );
INSERT INTO book
VALUES
	( '665544', 'TS7/21', '高等数学', '刘明', '高等教育出版社', 20.00 );
INSERT INTO book
VALUES
	( '114455', 'TR9/12', '线性代数', '孙业', '北京大学出版社', 20.80 );
INSERT INTO book
VALUES
	( '113388', 'TR7/90', '大学英语', '胡玲', '清华大学出版社', 12.50 );
INSERT INTO book
VALUES
	( '446601', 'TP4/13', '数据库基础', '马凌云', '人民邮电出版社', 22.50 );
INSERT INTO book
VALUES
	( '446602', 'TP4/13', '数据库基础', '马凌云', '人民邮电出版社', 22.50 );
INSERT INTO book
VALUES
	( '446603', 'TP4/13', '数据库基础', '马凌云', '人民邮电出版社', 22.50 );
INSERT INTO book
VALUES
	( '449901', 'TP4/14', 'FoxPro大全', '周虹', '科学出版社', 32.70 );
INSERT INTO book
VALUES
	( '449902', 'TP4/14', 'FoxPro大全', '周虹', '科学出版社', 32.70 );
INSERT INTO book
VALUES
	( '118801', 'TP4/15', '计算网络', '黄力钧', '高等教育出版社', 21.80 );
INSERT INTO book
VALUES
	( '118802', 'TP4/15', '计算网络', '黄力钧', '高等教育出版社', 21.80 );


INSERT INTO reader
VALUES
	( '111', '信息系', '王维利', '女', '教授', '1号楼' );
INSERT INTO reader
VALUES
	( '112', '财会系', '李立', '男', '副教授', '2号楼' );
INSERT INTO reader
VALUES
	( '113', '经济系', '张三', '男', '讲师', '3号楼' );
INSERT INTO reader
VALUES
	( '114', '信息系', '周华发', '男', '讲师', '1号楼' );
INSERT INTO reader
VALUES
	( '115', '信息系', '赵正义', '男', '工程师', '1号楼' );
INSERT INTO reader
VALUES
	( '116', '信息系', '李明', '男', '副教授', '1号楼' );
INSERT INTO reader
VALUES
	( '117', '计算机系', '李小峰', '男', '助教', '1号楼' );
INSERT INTO reader
VALUES
	( '118', '计算机系', '许鹏飞', '男', '教授', '1号楼' );
INSERT INTO reader
VALUES
	( '119', '计算机系', '刘大龙', '男', '副教授', '4号楼' );
INSERT INTO reader
VALUES
	( '120', '国际贸易', '李雪', '男', '副教授', '4号楼' );
INSERT INTO reader
VALUES
	( '121', '国际贸易', '李爽', '女', '讲师', '4号楼' );
INSERT INTO reader
VALUES
	( '122', '国际贸易', '王纯', '女', '讲师', '4号楼' );
INSERT INTO reader
VALUES
	( '123', '财会系', '沈小霞', '女', '助教', '2号楼' );
INSERT INTO reader
VALUES
	( '124', '财会系', '朱海', '男', '讲师', '2号楼' );
INSERT INTO reader
VALUES
	( '125', '财会系', '马英明', '男', '副教授', '2号楼' );



INSERT INTO borrow
VALUES
	( '112', '445501', '1997-3-19' );
INSERT INTO borrow
VALUES
	( '125', '332211', '1997-2-12' );
INSERT INTO borrow
VALUES
	( '111', '445503', '1997-8-21' );
INSERT INTO borrow
VALUES
	( '112', '112266', '1997-3-14' );
INSERT INTO borrow
VALUES
	( '114', '665544', '1997-10-21' );
INSERT INTO borrow
VALUES
	( '120', '114455', '1997-11-2' );
INSERT INTO borrow
VALUES
	( '120', '118801', '1997-10-18' );
INSERT INTO borrow
VALUES
	( '119', '446603', '1997-12-12' );
INSERT INTO borrow
VALUES
	( '112', '449901', '1997-10-23' );
INSERT INTO borrow
VALUES
	( '115', '449902', '1997-8-21' );
INSERT INTO borrow
VALUES
	( '118', '118801', '1997-9-10' );



1、查找出价格位于10元和20元之间的图书种类,结果按出版单位和单价升序排序

#1、查找出价格位于10元和20元之间的图书种类,结果按出版单位和单价升序排序
SELECT
    b_publish as "出版社" ,
	b_price as  "价格"
FROM
	book 
WHERE b_price BETWEEN 10 AND 20 
ORDER BY b_price, b_publish; #默认升序

在这里插入图片描述

2、找出藏书中各个出版社的册数、价值总额
# 2、找出藏书中各个出版社的册数、价值总额
SELECT
	b_publish as "出版社",
	COUNT( b_no ) as "册数",
	sum( b_price ) as "价值总额" 
FROM
	book 
GROUP BY
	b_publish

在这里插入图片描述


3、求出各个出版社图书的最高价格、最低价格和总册数

#3、求出各个出版社图书的最高价格、最低价格和总册数
SELECT
	b_publish as "出版社" ,
	MAX( b_price ) as "最高价格",
	min( b_price ) as "最低价格",
	COUNT(b_no) as "册数"
FROM
	book
GROUP BY
    b_publish

在这里插入图片描述


4、查找所有借了书的读者的姓名以及所在单位
-- 4、查找所有借了书的读者的姓名以及所在单位
SELECT distinct  #distinct删除重复的结果
  r_name  as "姓名" ,
  r_unit as "所在单位"
FROM borrow,reader 
WHERE borrow.r_no =reader.r_no 

在这里插入图片描述

5、找出李某所借图书的所有图书的书名及借书日期
#5、找出李某所借图书的所有图书的书名及借书日期	
SELECT
	b_name as "图书名",
	b_time as "借阅时间"	
FROM
	borrow as a,
	reader as b,
	book as c 
WHERE
	a.b_no = c.b_no 
	AND a.r_no = b.r_no 
	AND r_name LIKE '李%'
	

在这里插入图片描述


6、查询1997年10月以后借书的读者借书证号、姓名和单位
#6、查询1997年10月以后借书的读者借书证号、姓名和单位

SELECT
  borrow.r_no as "借书证号",   #对于重复出现的列。必须写具体的borrow.r_no因为有两个表都有r_no列 
	b_name as "姓名",
	r_unit as "单位" 
FROM
	borrow
	INNER JOIN reader ON borrow.r_no = reader.r_no
	INNER JOIN book ON borrow.b_no = book.b_no 
WHERE
	b_time > '1997-10-1'

# 方法二
SELECT
	a.r_no as "借书证号",   
	b_name as "姓名",
	r_unit as "单位" 
FROM
	borrow as a,
	reader as b,
	book as c 
WHERE
	a.b_no = c.b_no 
	AND a.r_no = b.r_no 
	AND b_time > '1997-10-1'

在这里插入图片描述

7、找出借阅了 FoxPro大全一书的借书证号以及作者
#7、找出借阅了 FoxPro大全一书的借书证号以及作者
SELECT 
	borrow.r_no as "借书证号" ,
	b_author as "作者"
FROM
	borrow
	INNER JOIN book ON borrow.b_no = book.b_no 
WHERE
	b_name = 'FoxPro大全'
	

在这里插入图片描述


8、分别找出借书人次超过1人次的单位及人次数
#8、分别找出借书人次超过1人次的单位及人次数 
SELECT
	r_unit as "单位",
	COUNT(borrow.r_no) as "人次数" 
FROM
	borrow
	INNER JOIN reader ON borrow.r_no = reader.r_no
GROUP BY
	r_unit 
HAVING
	count(borrow.r_no) > 1;

在这里插入图片描述


9、找出与赵正义在同一天借书的读者姓名、所在单位以及借书日期
#9找出与赵正义在同一天借书的读者姓名、所在单位以及借书日期

SELECT
	r.r_name as 姓名,
	r.r_unit as 所在单位,
	b.b_time  as 借书日期
FROM
	borrow as b,
	reader as r
WHERE
	b.r_no = r.r_no 
	AND b.b_time = (
	SELECT
		b.b_time 
	FROM
	borrow as b,
	reader as r
	WHERE
		b.r_no = r.r_no 
		AND r.r_name = '赵正义' 
	)
	

在这里插入图片描述

10、求信息系当前借阅图书的读者人次数

#10、求信息系当前借阅图书的读者人次数 
SELECT
	COUNT(*) AS 人次数 
FROM
	borrow b,
	reader r 
WHERE
	r.r_no = b.r_no 
	AND r.r_unit = '信息系'
	

在这里插入图片描述

11、找出当前至少借阅了2本书的读者及所在单位
#11、找出当前至少借阅了2本书的读者及所在单位 
SELECT DISTINCT
	r1.r_name as 姓名,
	r1.r_unit as 单位
FROM
	reader as r1
	INNER JOIN borrow as b1 ON r1.r_no = b1.r_no 
WHERE
	r1.r_name IN (
	SELECT
		r2.r_name 
	FROM
		reader r2
		INNER JOIN borrow b2 ON r2.r_no = b2.r_no 
	GROUP BY
		r2.r_name 
	HAVING
		COUNT(*)>= 2 
	)

在这里插入图片描述

12、找出姓李的读者姓名和所在单位
#12、找出姓李的读者姓名和所在单位 
SELECT r_name ,r_unit
FROM reader
WHERE r_name LIKE'李%';

在这里插入图片描述

13、求科学出版社图书的最高单价、最低单价和平均单价
#13、求科学出版社图书的最高单价、最低单价和平均单价 
SELECT
  b_publish as 出版社,
	MAX( b_price ) as 最高价,
	MIN( b_price ) as 最低价,
	AVG( b_price ) as 平均价
FROM
	book 
GROUP BY
	b_publish 
HAVING
	b_publish = '科学出版社';

在这里插入图片描述


14、查找出高等教育出版社的所有图书及单价,结果按单价降序排列
#14、查找出高等教育出版社的所有图书及单价,结果按单价降序排列 
SELECT DISTINCT
	b_name AS 图书 ,
	b_price as 单价
FROM
	book 
WHERE
	b_publish = '高等教育出版社' 
ORDER BY
	b_price DESC;  #desc 是降序。 默认是按升序输出

在这里插入图片描述


#### 15、列出图书库中所有藏书的书名以及出版单位
-- 15、列出图书库中所有藏书的书名以及出版单位
SELECT
	b_name AS 书名,
	b_publish AS 出版单位 
FROM
	book 
GROUP BY
	b_name

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐