跪解以下2道数据库系统原理上机试题

跪解以下2道数据库系统原理上机试题,第1张

borrower:

create table borrower(

借书证号 char[5] primary key,

姓名 char[20] not null,

系名 char[10],

班级 char[10])

create table loans(

借书证号 char[5],

图书登记号 char[6],

结束日期 DATE,

primary key(借书证号,图书登记号),

foreign key(借书证号) reference borrower(借书证号),

foreign key(图书登记号 reference books(图书登记号))

create table books(

索书号 char[10],

书名 char[20],

图书登记号 char[6] primary key,

出版社 char[20],

价格 smallint))

(1)

select borrower.借书证号,姓名,系名,temp.total as 借书数量

from borrower,(select 借书证号,count(图书登记号) as total

from loans group by 借书证号

where tatal>5 as temp(借书证号,total))

(2)

select borrower.姓名,系名,书名,结束日期

from borrower,loans,books

where borrower.借书证号=loans.借书证号

and books.图书登记号=loans.图书登记号

and 书名 in(selcet 书名

from borrower,loans,books

where borrower.借书证号=loans.借书证号

and books.图书登记号=loans.图书登记号

and 姓名='赵垒')

(3)

create view SB

as

select borrower.借书证号,姓名,班级,books.图书登记号,书名,出版社

,借书日期

from borrower,book,loans

where borrower.借书证号=loans.借书证号

and books.图书登记号=loans.图书登记号

and 系名='信息系'

1

create table student(

sno char[10] primary key,

sname char[20] not null,

ssex char[2],

sage smallint check( sage between 16 and 30),

sdept char[4])

create table course(

cno char[10] primary key,

cname char[20] not null,

cteacher char[20])

create table sc(

sno char[10],

cno char[10],

grade smallint check(grade is null or grade between 0 and

100),

primary key(sno,cno)

foreign key sno reference student(sno),

foreign key cno reference course(cno))

2

insert into student values('102','李四','男',16,'数学')

下同

insert into course values('203',' *** 作系统','程羽')

下同

insert into sc values('101','203',82)

下同

3

(1) select cname,grade

from sc,student,course

where student.sno=sc.sno and course.cno=sc.cno

and sname='张三'

(2) select sname from student

where sno in(select sno from sc x

where not exists(

select * from sc y

where x.sno=y.sno

and y.grade<60))

(3) select cname,sname,grade

from student,course sc,(select cno,max(grade) from sc group by cno

as temp(cno,max))

where student.sno=sc.sno and course.cno=sc.cno

and grade=max and course.cno=temp.cno

4

delete * from sc where grade<60

5

update sc

set grade=(select avg(grade) from sc where cno='203')

where sno=105

仅供参考

都是用SQL SERVER的语法来做的。不知道你要求的是哪个数据库的语法。

第一题:

---t表查询每次运输和下次的时间间隔,同一辆车,两次货运日期之间没有运输记录,就连续两次

select top 1 t1.货车编号, 姓名,联系方式

FROM

(select top 2 货车编号,最长间隔 from

(select a.货车编号, max(datediff(d,a.运输日期,b.运输日期) ) as 最长间隔

from运输记录 a, 运输记录 b

where a.货车编号 = b.货车编号

and a.货运单编号 <>b.货运单编号

and a.运输日期 <b.运输日期

and not exists (select 1 from 运输记录 c where a.货车编号 = c.货车编号 and c.运输日期 between a.运输日期 and b.运输日期)

group by a.货车编号) t

order by 最长间隔) t1,

货车, 司机

where t1.货车编号 = 货车.货车编号

and 货车.司机 = 司机.司机

order by 最长间隔 desc

第二题:

select top 1 tmonth as 最忙月份, cnt as 运输次数, 运入总量, 运出总量

FROM

(select month(运输日期) as tmonth,

count(1) as cnt,

sum(case 交易类型 when '运入' then 运输量 else 0 end ) as 运入总量,

sum(case 交易类型 when '运出' then 运输量 else 0 end ) as 运出总量

from 运输记录

where year(运输日期) = 2009

group by tmonth) t

order by t.cnt desc


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9899068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存