数据库实验八SQL语句的综合使用
本博文源于校内数据库原理的学习,本周布置了数据库的SQL语句综合使用的作业。博主将作业写完后,并将其撰写为博文,以备期末考试复习,因为很多语句都需要看书,或者百度。这肯定不行的,争取需要背诵和记住。为了整个博文的清晰,我在首页又设置了目录,通过目录的点击,便可以轻松的对任务一一完成。因为语句都已上机调试过,为了更加快速撰写,我只将代码进行搬运,有需要便可以收藏此博文。谢谢读者的观看浏览。
·
本博文源于校内数据库原理的学习,本周布置了数据库的SQL语句综合使用的作业。博主将作业写完后,并将其撰写为博文,以备期末考试复习,因为很多语句都需要看书,或者百度。这肯定不行的,争取需要背诵和记住。为了整个博文的清晰,我在首页又设置了目录,通过目录的点击,便可以轻松的对任务一一完成。因为语句都已上机调试过,为了更加快速撰写,我只将代码进行搬运,有需要便可以收藏此博文。谢谢读者的观看浏览。
文章目录
- 1. 建立一图书借阅库(TSJY),并在在该库下建立以下四个表:
- 2. 要求为每个表建立一个主键
- 3. 建立“管理员”表时要求其“性别”一列的默认值为“男”。
- 4. 为“图书”的“分类号”建立一个索引ts_flh。
- 5. 为“借阅”表建立一唯一索引jycx,要求按“借书证号 ”升序,“借书日期 ” 降序。
- 6. 为“管理员”表建立一检查约束,要求“基本工资”在(100,10000)之间。
- 7. 建立“借阅”与“图书”及“读者”表之间的参照关系。
- 8. 为每个表插入3-5条记录(记录数据自定)。
- 9. 查询出“图书”数据库中作者姓“刘”的所有图书
- 10. 查询出“图书”数据库中高等教育出版社出版的、单价低于25元的所有种类的图书。
- 11. 求出“读者”数据库中的总人数。
- 12. 求出“图书”数据库中的所有图书的最高价、最低价和平均价。
- 13. 求出“借阅”库中借书证号为“112”的所借图书的册数。
- 14. 按分类号降序显示“图书”库中各种图书的分类号、书名合作者。
- 15. 按单价升序显示“图书”库中的高等教育出版社出版的所有图书。
- 16. 按单价升序显示出“图书”库中由清华大学出版社和电子工业出版社出版的所有图书。
- 17. 按书名和作者分组统计出“图书”库中每种图书的数量。
- 18. 统计出“图书”数据库中15至25元之间的图书数量。
- 19. 查询出“图书”数据库中书名中含有“应用基础”字串的所有图书。
- 20. 分组统计出“借阅”数据库中每一种借书证号所借图书的册数。
- 21. 按单位分组统计出“读者”数据库中每个单位的人数。
- 22. 分组统计出1997年底以前借阅不低于2本图书的借书证号和数量。
- 23. 联接查询“借阅”库和“图书”,得到借阅每一本书的信息。
- 24. 联接查询“借阅”库和“读者”库,得到每一个以借阅者的借书证号、姓名、单位。
- 25. 联接查询“借阅”、“读者”、“图书”三个库,得到每一本所借图书的读者的借书证号、姓名、单位、书名。
- 26. 从“图书”数据库中(通过对“借阅”库的嵌套)查询出所有被借图书的信息。
- 27. 按单位分组统计出被借图书的数量。
- 28. 按单位分组统计出借阅图书的人数。
- 29. 从读者库中查询出每个借阅图书的读者的情况。
- 30. 查询‘管理员’表中职称为教授或副教授,并且在1950年(含该年)以后出生的所有职工记录。
- 31. 查询‘管理员’表中基本工资在250到380元之间的职工记录。
- 32. 将基本工资小于500的管理员,工资加上100元。
- 33. 列出藏书在十本以上的图书(书名、作者、出版社)。
- 34. 数据库系统原理教程,王珊编,清华大学出版社,1998年出版”还有几本?
- 文末:附完整源码
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 出版单位='清华大学出版社';
更多推荐
已为社区贡献10条内容
所有评论(0)