0
点赞
收藏
分享

微信扫一扫

数据库上机实验一、二

贵州谢高低 2022-03-16 阅读 67

学习完了数据库的基本语法,上机实验也要开始了,在我上一篇关于sql server排序规则排查错误博客中,学习到了很多,具体可以点击此处。
下面开始上机实验,因为数据库的实验大多是查询语法,故这里将每一行代码写出,顺便对几个新颖的关键词做一些解释。
对于数据库与表的创建见文章末尾,这里就不再多谈,下面就直接开始我们的22个查询语句吧
使用的教材是《数据库原理与技术——基于sql server2012》李春葆 著。
如果遇到排序规则冲突的情况(一般在SSMS上不会发生),请在条件输入:COLLATE Chinese_PRC_CI_AS
完成不易,你的三连就是我创作的最大动力!
有好的方法欢迎交流,以下思路方法均为个人思路,不一定是最优解!
22个查询语句:

-- T1
select count(distinct 图书名) as'图书总数' from book2128
-- T2
select  图书名,count(*) as'图书数目'
from book2128
group by 图书名
select d.班号 ,count(s.学号)as'人数'
from depart2128 d,student2128 s
where d.班号=s.班号
group by  d.班号
select  d.系名,count(s.学号) as'人数'
from depart2128 d,student2128 s
where d.班号=s.班号
group by d.系名
select s.学号,s.姓名,bo.图书名,b.借书日期
from borrow2128 b,student2128 s,book2128 bo
where b.学号=s.学号 and bo.图书编号=b.图书编号

select  distinct s.学号,s.姓名
from borrow2128 b,student2128 s
where b.学号=s.学号
select distinct s.姓名,count(b.图书编号) as'借阅图书数目'
from student2128 s,borrow2128 b
where s.学号=b.学号
group by s.姓名
select s.学号,s.姓名,count(b.图书编号)as'所借数目'
from student2128 s,borrow2128 b
where  b.学号=s.学号
group by  s.学号, s.姓名
having  count(b.图书编号)>1
select s.学号,s.姓名,s.班号
from(
    select  bo.图书名,bo.图书编号,b.学号
    from book2128 bo
    join borrow2128 b on (
        b.图书编号=bo.图书编号 and 图书名='操作系统'
        )
        )a
join student2128 s
on(
    s.学号=a.学号
    )
select distinct  s.班号,count(b.图书编号)as '借书总数'
from student2128 s, borrow2128 b
where s.学号=b.学号
group by s.班号
select  distinct  left(bo.图书编号,3)as'图书编号',avg(bo.定价) as'平均价'
from book2128 bo
group by left(bo.图书编号,3)
select  distinct  left(bo.图书编号,3)as'图书编号',avg(bo.定价) as'平均价'
from book2128 bo
group by left(bo.图书编号,3)
select  distinct  left(b.图书编号,3)as'图书编号类别',avg(b.定价)as'平均价',max(b.定价)as'最高价'
from book2128 b
group by left(b.图书编号,3)
select bo.图书编号,bo.图书名,bo.作者
from book2128 bo
where bo.图书名 like '%工程%'

select 图书名,作者
from book2128
where 定价=(select  max(定价) from  book2128)

select  s.学号,s.姓名
from student2128 s,borrow2128 b,book2128 bo
where s.学号=b.学号 and b.图书编号=bo.图书编号 and bo.图书名='C程序设计'

go

select  s.学号 , s.姓名
from student2128 s,borrow2128 b,book2128 bo
where s.学号=b.学号 and b.图书编号=bo.图书编号 and bo.图书名='C程序设计' and not exists(
    select * from  book2128 bo1,borrow2128 b1
    where bo1.图书编号=b1.图书编号 and bo.图书名='C习题解答' and b1.学号=b.学号
    )
select  学号,姓名
from student2128
where  学号 not in(
    select  distinct  学号 from borrow2128
    )
select  d.系名,count(b.学号) as'所借图书的总数'
from depart2128 d,student2128 s,borrow2128 b
where  d.班号=s.班号 and s.学号=b.学号
group by  d.系名

select  b.出版社,count(b.图书编号)
from book2128 b
group by  b.出版社

select 出版社,cast(round(count(图书编号)*100.0/(select count(*) from book2128),1) as  numeric(5,1)) as 百分比
from
book2128  b
group by 出版社
select  bo.出版社,count(*)as'借书数目'
from book2128 bo,borrow2128 b
where b.图书编号=bo.图书编号
group by bo.出版社

以上是全部题目了,下面附创建数据库与表,并且插入数据的代码:

create  database  Library2128
use Library2128
-- 排序方法
ALTER DATABASE Library2128 COLLATE Chinese_PRC_CI_AS

-- Create Table
create  table depart2128(
    班号 nvarchar(10) not null  primary key ,
    系名 nvarchar(10) not null
)

create  table student2128(
    学号 nvarchar(10) not null primary key ,
    姓名 nvarchar(10) not null ,
    性别 nvarchar(10) not null,
    出生日期 datetime not null,
    班号 nvarchar(10) not null
)

create  table book2128(
    图书编号 nvarchar(10) not null  primary key ,
    图书名 nvarchar(10)  not null,
    作者 nvarchar(10) not null,
    定价 float  not null,
    出版社 nvarchar(10) not null
)


create  table  borrow2128(
    学号 nvarchar(10) not null,
    图书编号 nvarchar(10) not null  primary key (学号,图书编号),
    借书日期 datetime
)

-- Insert values 
insert into book2128(图书编号,图书名,作者,定价,出版社)
values
(	'10011'	,	'C语言设计 '	,	'李洪      '	,	24,	'清华大学出版社 '	)	,
(	'10012'	,	'C语言设计 '	,	'李洪      '	,	24	,'清华大学出版社 '	)	,
(	'10013'	,	'C习题解答 '	,	'李洪      '	,	12	,'清华大学出版社 '	)	,
(	'10014'	,	'C习题解答 '	,	'李洪      '	,	12	,'清华大学出版社 '	)	,
(	'10020'	,	'数据结构  '	,	'徐华      '	,	29	,'人民邮电出版社 '	)	,
(	'10021'	,	'数据结构  '	,	'徐华      '	,	29,	'清华大学出版社 '	)	,
(	'10023'	,	'高等数学  '	,	'王涛      '	,	30	,'高等教育出版社 '	)	,
(	'10034'	,	'软件工程  '	,	'张明      '	,	34	,'机械工业出版社 '	)	,
(	'20025'	,	'信息学    '	,	'张港      '	,	35	,'清华大学出版社 '	)	,
(	'20026'	,	'信息学    '	,	'张港      '	,	35	,'清华大学出版社 '	)	,
(	'20042'	,	'电工学    '	,	'王明      '	,	30	,'人民邮电出版社 '	)	,
(	'20056'	,	'操作系统  '	,	'曾平      '	,	26,	'清华大学出版社 '	)	,
(	'20057'	,	'操作系统  '	,	'曾平      '	,	26	,'清华大学出版社 '	)	,
(	'20058'	,	'操作系统  '	,	'曾平      '	,	26	,'清华大学出版社 '	)	,
(	'20067'	,	'数字电路  '	,	'徐汉      '	,	32	,'高等教育出版社 '	)	,
(	'20140'	,	'数据库原理'	,	'陈曼      '	,	32	,'高等教育出版社 '	)	,
(	'20090'	,	'网络工程  '	,	'黄军      '	,	38	,'高等教育出版社'	)	;
insert into depart2128 values (
        '0501',	'计算机系  '
 )

insert into depart2128 values (
          '0502','计算机系'
                              )

insert  into depart2128 values (
         '0801' ,'电子工程系'
                               )

insert  into depart2128 values (
         '0802','电子工程系'
                               )
insert  into student2128 (学号, 姓名, 性别, 出生日期, 班号)
values
('1',	'张任',      	'男',   	'1995-01-02'	,'0501'),
('2',	'程华',      	'男',   	'1996-01-10',	'0501'),
('3',	'张丽',      	'女',   	'1995-06-07',	'502'),
('4'	,'王英' ,     	'女' ,  	'1994-12-10'	,'0502'),
('5',	'李静',      	'女' ,  	'1995-04-05'	,'0502'),
('10',	'许兵'   ,   	'男',   	'1995-08-10',	'0801'),
('11',	'张功',      	'男',   	'1995-06-02',	'0801'),
('12',	'李华',      	'男',   	'1994-10-03',	'0801'),
('13',	'马超'  ,       '男' , 	'1996-02-03'	,'0802'),
('14',	'曾英',      	'女'   ,	'1994-03-06'	,'0802');

insert  into borrow2128 (学号, 图书编号, 借书日期)
values
('1',	'10020',	'2013-12-05'),
('2',	'20025',	'2013-11-08'),
('1',	'20059',	'2014-04-11'),
('2',	'10011',	'2013-10-02'),
('2',	'10013',	'2014-04-03'),
('3',	'10034'	,'2014-04-10'),
('3',	'20058'	,'2014-04-13'),
('4',	'10012',	'2014-04-06'),
('5',	'10023',	'2014-02-03'),
('12',	'20067',	'2014-03-06')
举报

相关推荐

0 条评论