本博文源于校内数据库原理的学习,本周布置了数据库的SQL语句综合使用的作业。博主将作业写完后,并将其撰写为博文,以备期末考试复习,因为很多语句都需要看书,或者百度。这肯定不行的,争取需要背诵和记住。为了整个博文的清晰,我在首页又设置了目录,通过目录的点击,便可以轻松的对任务一一完成。因为语句都已上机调试过,为了更加快速撰写,我只将代码进行搬运,有需要便可以收藏此博文。谢谢读者的观看浏览。

文章目录

1. 建立一图书借阅库(TSJY),并在在该库下建立以下四个表:

在这里插入图片描述

create database TSJY;
create table book(
	编号 char(6) not null,
	分类号 char(8),
	书名 char(16),
	作者 char(6),
	出版单位 char(16),
	单价 numeric(7,2),
	总藏书量 INT,
	现有库存 INT

);

create table reader(
	借书证号 char(4) not null, 
	单位 char(10), 
	姓名 char(6), 
	性别 char(2),
	职称 char(6), 
	 地址 char(16)

);

create table borrow(

	借书证号 char(4), 
	编号 char(6),
	 借书日期 datetime,
	 还书日期 datetime,
);

create table administrator(
	职工号 char(6) not null, 
	姓名 char(6), 
	性别 char(2), 
	出生日期 datetime,
	 职称 char(6),
	 基本工资 numeric(7,2),
);

2. 要求为每个表建立一个主键

/*(1)	要求为每个表建立一个主键。*/
alter table Book add primary key (编号) ;
alter table reader add primary key (借书证号) ;
alter table administrator add primary key (职工号 ) ;

3. 建立“管理员”表时要求其“性别”一列的默认值为“男”。


/*(2)	建立“管理员”表时要求其“性别”一列的默认值为“男”。*/
alter table administrator add constraint Defaultsex default '男' for 性别;

4. 为“图书”的“分类号”建立一个索引ts_flh。

/*(3)	为“图书”的“分类号”建立一个索引ts_flh。*/
create index ts_flh on book(分类号);

5. 为“借阅”表建立一唯一索引jycx,要求按“借书证号 ”升序,“借书日期 ” 降序。

/*(4)	为“借阅”表建立一唯一索引jycx,要求按“借书证号 ”升序,“借书日期 ” 降序。*/
create unique index jycx on borrow(借书证号 asc,借书日期 desc);

6. 为“管理员”表建立一检查约束,要求“基本工资”在(100,10000)之间。


/*(5)	为“管理员”表建立一检查约束,要求“基本工资”在(100,10000)之间。*/

alter table administrator add constraint val_check check(基本工资 between 100 and 10000);

7. 建立“借阅”与“图书”及“读者”表之间的参照关系。

/*(6)	建立“借阅”与“图书”及“读者”表之间的参照关系。 */
alter table borrow add foreign key(编号) references book(编号);
alter table borrow add foreign key(借书证号) references reader(借书证号);

8. 为每个表插入3-5条记录(记录数据自定)。

/* 	为每个表插入3-5条记录(记录数据自定)。*/
insert into book values('001','5843','离散数学','耿素云','清华大学出版社',33.00,20,16),
					   ('002','6379','电子技术基础','康华光','高等教育出版社',59.90,20,10),
					   ('003','6538','新编大学英语','应惠兰','外语教学出版社',39.90,20,20),
					   ('004','7096','医药数据库','杜建强','中国中医药出版社',49.00,20,15)
					   
insert into reader values('110','浙中医大','张三','男','学生','立业园'),
					     ('111','浙中医大','李四','女','学生','立业园'),
					     ('112','浙中医大','王五','男','学生','立业园'),
					     ('113','浙中医大','赵六','女','学生','立业园'),
					     ('114','浙中医大','田七','男','学生','立业园')
					     
insert into borrow values('110','001','1999-11-19','1999-12-19'),
						 ('110','002','1992-11-06','1992-12-06'),
						 ('110','004','1997-10-29','1997-11-29'),
						 ('111','003','1998-11-19','1998-12-19'),
						 ('112','001','1997-10-22','1997-11-22'),
						 ('112','002','1999-11-25','1999-12-25'),
						 ('113','001','1996-10-01','1996-11-01'),
						 ('114','004','1999-11-18','1999-12-18')
						 
insert into administrator values('200','jack','男','1990-05-23','老师',5000),
						('201','tom','男','1990-06-04','老师',5500),
						('202','lucy','女','1990-03-18','老师',5500)




9. 查询出“图书”数据库中作者姓“刘”的所有图书

/* 查询出“图书”数据库中作者姓“刘”的所有图书。*/
insert into book values('005','8023','数学分析','刘星武','清华大学出版社',33.00,20,16);
select * from book where 作者 like '刘%'

10. 查询出“图书”数据库中高等教育出版社出版的、单价低于25元的所有种类的图书。

/* 	查询出“图书”数据库中高等教育出版社出版的、单价低于25元的所有种类的图书。*/
insert into book values('006','8024','线性代数','张文星','高等教育出版社',23.00,20,16);
select * from book where 出版单位='高等教育出版社' and 单价 < 25.0;

11. 求出“读者”数据库中的总人数。

/*求出“读者”数据库中的总人数。*/
select count(*) as 总人数  from reader;

12. 求出“图书”数据库中的所有图书的最高价、最低价和平均价。

/*	求出“图书”数据库中的所有图书的最高价、最低价和平均价。*/
select max(单价) as 最高价 ,min(单价) as 最低价,avg(单价) as 平均价 from book;

13. 求出“借阅”库中借书证号为“112”的所借图书的册数。

/*	求出“借阅”库中借书证号为“112”的所借图书的册数。*/
select count(*) as 借书册数 from borrow where 借书证号='112';

14. 按分类号降序显示“图书”库中各种图书的分类号、书名合作者。

/*	按分类号降序显示“图书”库中各种图书的分类号、书名he作者。*/
select 分类号,书名,作者 from book order by 分类号 desc;


15. 按单价升序显示“图书”库中的高等教育出版社出版的所有图书。

/*	按单价升序显示“图书”库中的高等教育出版社出版的所有图书。*/
select * from book where 出版单位='高等教育出版社' order by 单价 asc;

16. 按单价升序显示出“图书”库中由清华大学出版社和电子工业出版社出版的所有图书。


/* 按单价升序显示出“图书”库中由清华大学出版社和电子工业出版社出版的所有图书。*/
select * from book where 出版单位='清华大学出版社' or 出版单位='电子工业出版社' order by   单价 asc;

17. 按书名和作者分组统计出“图书”库中每种图书的数量。

/* 按书名和作者分组统计出“图书”库中每种图书的数量。*/
select count(*)  as '数量' from book group by 书名,作者;

18. 统计出“图书”数据库中15至25元之间的图书数量。

/* 	统计出“图书”数据库中15至25元之间的图书数量。*/
select count(*) as '数量' from book where 单价 between 15 and 25;


19. 查询出“图书”数据库中书名中含有“应用基础”字串的所有图书。

/* 查询出“图书”数据库中书名中含有“应用基础”字串的所有图书。*/
insert into book values('007','8025','java应用基础','刘星星','高等教育出版社',13.00,21,15);
insert into book values('008','8026','应用基础c++','赵芳芳','高等教育出版社',9.00,26,15);
select * from book where 书名 like '%应用基础%';


20. 分组统计出“借阅”数据库中每一种借书证号所借图书的册数。

/*	分组统计出“借阅”数据库中每一种借书证号所借图书的册数。 */
select 借书证号,count(*) as  '数量'  from borrow group by 借书证号;

21. 按单位分组统计出“读者”数据库中每个单位的人数。

/*(14)	按单位分组统计出“读者”数据库中每个单位的人数。*/
select 单位,count(*) as  '数量' from reader group by 单位;

22. 分组统计出1997年底以前借阅不低于2本图书的借书证号和数量。

/* )分组统计出1997年底以前借阅不低于2本图书的借书证号和数量。*/
--select * from borrow where ;
insert into borrow values('110','005','1992-11-19','1992-12-19');
select 借书证号,count(*) as 数量 from borrow  where 借书日期<'1997-12-31' group by 借书证号 having count(*) > 2;


23. 联接查询“借阅”库和“图书”,得到借阅每一本书的信息。

/*(16)	联接查询“借阅”库和“图书”,得到借阅每一本书的信息。*/
select book.书名,borrow.* from book,borrow where borrow.编号=book.编号;

24. 联接查询“借阅”库和“读者”库,得到每一个以借阅者的借书证号、姓名、单位。

/*(17)联接查询“借阅”库和“读者”库,得到每一个以借阅者的借书证号、姓名、单位。*/
select distinct re.借书证号,re.姓名,re.单位 from reader as re,borrow as bo where bo.借书证号=re.借书证号;

25. 联接查询“借阅”、“读者”、“图书”三个库,得到每一本所借图书的读者的借书证号、姓名、单位、书名。

/*	联接查询“借阅”、“读者”、“图书”三个库,得到每一本所借图书的读者的借书证号、姓名、单位、书名。*/

select distinct bo.借书证号,re.单位,re.姓名,book.书名 from borrow as bo,reader as re,book where book.编号=bo.编号 and bo.借书证号=re.借书证号;


26. 从“图书”数据库中(通过对“借阅”库的嵌套)查询出所有被借图书的信息。

/* 	从“图书”数据库中(通过对“借阅”库的嵌套)查询出所有被借图书的信息。*/
select * from book where 编号 in (select  编号 from borrow);


27. 按单位分组统计出被借图书的数量。

/*(20)	按单位分组统计出被借图书的数量。*/
select 单位,count(单位) as 数量 from reader,borrow where reader.借书证号=borrow.借书证号 group  by 单位;

28. 按单位分组统计出借阅图书的人数。

/*(21)	按单位分组统计出借阅图书的人数。*/
select 单位,count(单位) as  人数 from reader where 借书证号 in(
	select distinct borrow.借书证号 from reader,borrow where reader.借书证号 = borrow.借书证号 
) group by 单位;

29. 从读者库中查询出每个借阅图书的读者的情况。

/*(22)从读者库中查询出每个借阅图书的读者的情况。*/
select * from reader as re where 借书证号 in (select distinct 借书证号 from borrow);

30. 查询‘管理员’表中职称为教授或副教授,并且在1950年(含该年)以后出生的所有职工记录。

/* 	查询‘管理员’表中职称为教授或副教授,并且在1950年(含该年)以后出生的所有职工记录。*/
insert into administrator values('203','sara','男','1990-05-24','教授',8000);
select * from administrator where 职称 in ('教授','副教授') and year(出生日期)>1950;


31. 查询‘管理员’表中基本工资在250到380元之间的职工记录。

/* 	查询‘管理员’表中基本工资在250到380元之间的职工记录。*/
insert into administrator values('205','alice','男','1990-05-25','老师',320);
select * from administrator where 基本工资 between 250 and 380;


32. 将基本工资小于500的管理员,工资加上100元。

/*(	将基本工资小于500的管理员,工资加上100元。*/
update administrator set 基本工资 += 100 where 基本工资<500;


33. 列出藏书在十本以上的图书(书名、作者、出版社)。

/*(26)	列出藏书在十本以上的图书(书名、作者、出版社)。*/
select 书名,作者,出版单位 from Book where 总藏书量>10;


34. 数据库系统原理教程,王珊编,清华大学出版社,1998年出版”还有几本?

/*(27)	“数据库系统原理教程,王珊编,清华大学出版社,1998年出版”还有几本?*/
insert into book values('010','5846','数据库系统','王珊','清华大学出版社',33.00,20,16);
select 书名,现有库存 from Book where 书名='数据库系统' and 作者='王珊' and 出版单位='清华大学出版社';

文末:附完整源码

create database TSJY;
/*(1)	图书 (编号 C(6), 
分类号 C(8), 书名 C(16), 作者 C(6), 
出版单位 C(16), 单价N(7,2),总藏书量 INT,现有库存INT) */
use TSJY;
create table book(
	编号 char(6) not null,
	分类号 char(8),
	书名 char(16),
	作者 char(6),
	出版单位 char(16),
	单价 numeric(7,2),
	总藏书量 INT,
	现有库存 INT

);

create table reader(
	借书证号 char(4) not null, 
	单位 char(10), 
	姓名 char(6), 
	性别 char(2),
	职称 char(6), 
	 地址 char(16)

);

create table borrow(

	借书证号 char(4), 
	编号 char(6),
	 借书日期 datetime,
	 还书日期 datetime,
);

create table administrator(
	职工号 char(6) not null, 
	姓名 char(6), 
	性别 char(2), 
	出生日期 datetime,
	 职称 char(6),
	 基本工资 numeric(7,2),
);

/*(1)	要求为每个表建立一个主键。*/
alter table Book add primary key (编号) ;
alter table reader add primary key (借书证号) ;

alter table administrator add primary key (职工号 ) ;

/*(2)	建立“管理员”表时要求其“性别”一列的默认值为“男”。*/
alter table administrator add constraint Defaultsex default '男' for 性别;

/*(3)	为“图书”的“分类号”建立一个索引ts_flh。*/
create index ts_flh on book(分类号);

/*(4)	为“借阅”表建立一唯一索引jycx,要求按“借书证号 ”升序,“借书日期 ” 降序。*/
create unique index jycx on borrow(借书证号 asc,借书日期 desc);

/*(5)	为“管理员”表建立一检查约束,要求“基本工资”在(100,10000)之间。*/

alter table administrator add constraint val_check check(基本工资 between 100 and 10000);

/*(6)	建立“借阅”与“图书”及“读者”表之间的参照关系。 */
alter table borrow add foreign key(编号) references book(编号);
alter table borrow add foreign key(借书证号) references reader(借书证号);

/*(1)	为每个表插入3-5条记录(记录数据自定)。*/
insert into book values('001','5843','离散数学','耿素云','清华大学出版社',33.00,20,16),
					   ('002','6379','电子技术基础','康华光','高等教育出版社',59.90,20,10),
					   ('003','6538','新编大学英语','应惠兰','外语教学出版社',39.90,20,20),
					   ('004','7096','医药数据库','杜建强','中国中医药出版社',49.00,20,15)
					   
insert into reader values('110','浙中医大','张三','男','学生','立业园'),
					     ('111','浙中医大','李四','女','学生','立业园'),
					     ('112','浙中医大','王五','男','学生','立业园'),
					     ('113','浙中医大','赵六','女','学生','立业园'),
					     ('114','浙中医大','田七','男','学生','立业园')
					     
insert into borrow values('110','001','1999-11-19','1999-12-19'),
						 ('110','002','1992-11-06','1992-12-06'),
						 ('110','004','1997-10-29','1997-11-29'),
						 ('111','003','1998-11-19','1998-12-19'),
						 ('112','001','1997-10-22','1997-11-22'),
						 ('112','002','1999-11-25','1999-12-25'),
						 ('113','001','1996-10-01','1996-11-01'),
						 ('114','004','1999-11-18','1999-12-18')
						 
insert into administrator values('200','jack','男','1990-05-23','老师',5000),
						('201','tom','男','1990-06-04','老师',5500),
						('202','lucy','女','1990-03-18','老师',5500)



/*(2)	查询出“图书”数据库中作者姓“刘”的所有图书。*/
insert into book values('005','8023','数学分析','刘星武','清华大学出版社',33.00,20,16);
select * from book where 作者 like '刘%'

/*(3)	查询出“图书”数据库中高等教育出版社出版的、单价低于25元的所有种类的图书。*/
insert into book values('006','8024','线性代数','张文星','高等教育出版社',23.00,20,16);

select * from book where 出版单位='高等教育出版社' and 单价 < 25.0;

/*(4)	求出“读者”数据库中的总人数。*/
select count(*) as 总人数  from reader;

/*(5)	求出“图书”数据库中的所有图书的最高价、最低价和平均价。*/
select max(单价) as 最高价 ,min(单价) as 最低价,avg(单价) as 平均价 from book;

/*(6)	求出“借阅”库中借书证号为“112”的所借图书的册数。*/
select count(*) as 借书册数 from borrow where 借书证号='112';

/*(7)	按分类号降序显示“图书”库中各种图书的分类号、书名he作者。*/
select 分类号,书名,作者 from book order by 分类号 desc;

/*(8)	按单价升序显示“图书”库中的高等教育出版社出版的所有图书。*/
select * from book where 出版单位='高等教育出版社' order by 单价 asc;

/*(9)	按单价升序显示出“图书”库中由清华大学出版社和电子工业出版社出版的所有图书。*/
select * from book where 出版单位='清华大学出版社' or 出版单位='电子工业出版社' order by   单价 asc;

/*(10)	按书名和作者分组统计出“图书”库中每种图书的数量。*/
select count(*)  as '数量' from book group by 书名,作者;

/*(11)	统计出“图书”数据库中15至25元之间的图书数量。*/
select count(*) as '数量' from book where 单价 between 15 and 25;

/*(12 查询出“图书”数据库中书名中含有“应用基础”字串的所有图书。*/
insert into book values('007','8025','java应用基础','刘星星','高等教育出版社',13.00,21,15);
insert into book values('008','8026','应用基础c++','赵芳芳','高等教育出版社',9.00,26,15);
select * from book where 书名 like '%应用基础%';

/*(13)	分组统计出“借阅”数据库中每一种借书证号所借图书的册数。 */
select 借书证号,count(*) as  '数量'  from borrow group by 借书证号;

/*(14)	按单位分组统计出“读者”数据库中每个单位的人数。*/
select 单位,count(*) as  '数量' from reader group by 单位;

/*(15)分组统计出1997年底以前借阅不低于2本图书的借书证号和数量。*/
--select * from borrow where ;
insert into borrow values('110','005','1992-11-19','1992-12-19');
select 借书证号,count(*) as 数量 from borrow  where 借书日期<'1997-12-31' group by 借书证号 having count(*) > 2;

/*(16)	联接查询“借阅”库和“图书”,得到借阅每一本书的信息。*/
select book.书名,borrow.* from book,borrow where borrow.编号=book.编号;

/*(17)联接查询“借阅”库和“读者”库,得到每一个以借阅者的借书证号、姓名、单位。*/
select distinct re.借书证号,re.姓名,re.单位 from reader as re,borrow as bo where bo.借书证号=re.借书证号;

/*(18)	联接查询“借阅”、“读者”、“图书”三个库,得到每一本所借图书的读者的借书证号、姓名、单位、书名。*/

select distinct bo.借书证号,re.单位,re.姓名,book.书名 from borrow as bo,reader as re,book where book.编号=bo.编号 and bo.借书证号=re.借书证号;

/*(19)	从“图书”数据库中(通过对“借阅”库的嵌套)查询出所有被借图书的信息。*/
select * from book where 编号 in (select  编号 from borrow);

/*(20)	按单位分组统计出被借图书的数量。*/
select 单位,count(单位) as 数量 from reader,borrow where reader.借书证号=borrow.借书证号 group  by 单位;

/*(21)	按单位分组统计出借阅图书的人数。*/
select 单位,count(单位) as  人数 from reader where 借书证号 in(
	select distinct borrow.借书证号 from reader,borrow where reader.借书证号 = borrow.借书证号 
) group by 单位;

/*(22)从读者库中查询出每个借阅图书的读者的情况。*/
select * from reader as re where 借书证号 in (select distinct 借书证号 from borrow);

/*(23)	查询‘管理员’表中职称为教授或副教授,并且在1950年(含该年)以后出生的所有职工记录。*/
insert into administrator values('203','sara','男','1990-05-24','教授',8000);
select * from administrator where 职称 in ('教授','副教授') and year(出生日期)>1950;

/*(24)	查询‘管理员’表中基本工资在250到380元之间的职工记录。*/
insert into administrator values('205','alice','男','1990-05-25','老师',320);
select * from administrator where 基本工资 between 250 and 380;

/*(25)	将基本工资小于500的管理员,工资加上100元。*/
update administrator set 基本工资 += 100 where 基本工资<500;

/*(26)	列出藏书在十本以上的图书(书名、作者、出版社)。*/
select 书名,作者,出版单位 from Book where 总藏书量>10;

/*(27)	“数据库系统原理教程,王珊编,清华大学出版社,1998年出版”还有几本?*/
insert into book values('010','5846','数据库系统','王珊','清华大学出版社',33.00,20,16);
select 书名,现有库存 from Book where 书名='数据库系统' and 作者='王珊' and 出版单位='清华大学出版社';
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐