数据库实验(图书信息表)

数据库实验(图书信息表)

实验一

1)创建表图书、读者和借阅,并为每个表定义主键约束; 图书(书号,类别,出版社,作者,书名,定价,出版数量) 读者 (读者编号,姓名,单位,性别,电话) 借阅(书号,读者编号,借阅日期);

2)定义借阅表与图书表之间以及借阅表与读者表之间的键约束;

3)分别向每个表中插入至少5行模拟数据;

4)修改借阅表,增加“归还日期”字段;

代码如下:

1.创建三个表:

create table Book(
Bno int primary key,
Bkind char(20),
Bpublish char(20),
Bauthor char(20),
Bname char(40),
Bprice int,
Bnum smallint,
)
create table Reader(
Rno int primary key,
Rname char(20),
Rworkplace char(20),
Rsex char(4),
Rtel int,
)
create table borrow(
Bno int,
Rno int,
rdate int,
foreign key(Bno)references Book(Bno),
foreign key(Rno)references Reader(Rno),
)

2.插入数据

insert into Book values(56201,'计算机','清华大学','严蔚敏','数据结构',48,20)
insert into Book values(56202,'计算机','清华大学','王珊','数据库',28,20)
insert into Book values(56203,'英语','人民教育','张亮','单词100天',36,50)
insert into Book values(56204,'数学','清华大学','王菲','高等数学',48,20)
insert into Book values(56205,'艺术','人民教育','张三','书法鉴赏',58,100)

insert into Reader values(01,'王敏','清华大学','女',158123)
insert into Reader values(02,'张丽','吕梁学院','女',159301)
insert into Reader values(03,'陈浩','山西大学','男',13658)
insert into Reader values(04,'贾丽','太原理工大学','女',135430)
insert into Reader values(05,'陈琳','北京大学','女',138364)

insert into borrow values(56201,01,0904)
insert into borrow values(56202,04,0904)
insert into borrow values(56202,03,0921)
insert into borrow values(56203,04,0903)
insert into borrow values(56204,05,0914)

3.修改借阅表,增加“归还日期”字段

alter table borrow add 归还日期 date

实验二

对图书读者数据库,应用SQL 语句实现以下查询要求:

1) 查询计算机类和机械工业出版社出版的图书;

select * from Book where Bkind='计算机'and Bpublish='机械工业出版社'

2) 查询“机械工业出版社”出版的各类图书的平均定价,用GROUP BY 表示;

 select AVG (Bprice)'平均定价' from Book 
 where Bpublish='机械工业出版社' group by Bpublish

3) 查找这样的图书类别:要求类别中最高的图书定价不低于全部按类别分组的图书平均定价的2倍;

select Bkind from Book group by Bkind
having MAX(Bprice)>=all(select AVG(Bprice)*2 from Book group by Bkind

4) 列出计算机类图书的书号、名称及价格,最后给出总册数和总价格;(提示:可以使用Compute子句最简便地实现);

select Bno,Bname,Bprice from Book create view v_s as 
select first.Bprice*second.Bnum total from Book first,Book
second where first.Bno=second.Bno
select * from Book,v_s compute sum(Bnum),sum(total)

5) 列出各出版社计算机类图书的具体书号、名称、价格和销售数量,并求出各出版社这类书的平均价格和销售总量。(提示:可以使用Compute by子句最简便地实现)。

select Bno,Bname,Bprice,Bnum from Book  where Bkind='计算机'
ORDER BY Bpublish COMPUTE AVG(Bprice),SUM(Bnum)BY Bpublish

实验三

对图书读者数据库,应用SQL 语句或企业管理器实现以下要求:

1)建立读者借阅视图(READER_BOOKS),属性包括读者编号、读者姓名、所借书号、书名、类别、出版社、借阅日期、归还日期);

create view READER_BOOKS as select Reader.Rno,Rname,Book.Bno,Bname, 
Bkind,Bpublish,rdate,归还日期 from Book,Reader,borrow where 
Book.Bno=borrow.Bno and Reader.Rno=borrow.Rno`

2)在该视图中查询张三读者所借阅的全部书籍的书名、类别以及借阅和归还日期

select Rname,Bname,Bpublish,rdate,归还日期 from READER_BOOKS
where Rname='张三'

3)统计每个读者各类别书籍的借阅总数;

select Rno,Bpublish,COUNT(Bno)as 借阅总数  from READER_BOOKS
group by Bpublish,Rn

小结

创建表格格式:

> create table 表名(
> 列名1 数据类型 primary key,//主键
> 列名2 数据类型,//一个普通的码  
> 列名3 数据类型,//外键   
> ...... 
> foreign key(列名3)references 其他表名(其他表名的列名,通常与列名三一致),)

查询数据的一般格式:

select 要查的列名(若查全部用*即可)from 表名(多个表用逗号隔开) where 条件
>where若想与group by连用要放在其之前 若想在其后加条件用having

插入数据的一般格式:

insert into 表名 values(列名1,列名2,......)
插入新的一列:alter table 表名 add 列名 数据类型

修改数据的一般格式:

update 表名 set 列名=列名*(其他操作也行)... 
eg.update sc set Grade=Grade*0.9

删除数据的一般格式:

delete from 表名 where 条件
eg.delete from student where Sno='95004'

视图:

需要多表连接得到的数据 并且会被多次用到时 创建一个视图是很好的选择  
  格式:create view 名字 as select语句
  注意:select语句不要加括号

常用聚集函数:

count() avg() max() min() sum()等
聚集语句:group by(列名)

一些关键字:

desc 降序
distinct 去掉重复列

一些细节:

不等于用<>或者!=
日期类型的数据插入格式:'2019/11/25'
判断是否为空:is(not) null 而不是!=null
发布了6 篇原创文章 · 获赞 0 · 访问量 752

猜你喜欢

转载自blog.csdn.net/qq_43760243/article/details/103240817