數據庫實驗(圖書信息表)
實驗一
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