1、本题用到下面三个关系表:
CARD(CNO,NAME,CLASS)
说明:card:借书卡 cno:卡号 name:姓名class: 班级
BOOKS(BNO, BNAME, AUTHOR, PRICE, QUANTITY)
说明:books:图书 bno:书号 bname:书名 author:作者 price:单价 quantity:库存册数
BORROW(CNO, BNO, RDATE)
说明:borrow:借书记录 cno:借书卡号 bno:书号 rdate: 还书日期
备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。
按要求查询数据:
(1) 找出借书超过5本的读者,输出借书卡号及所借图书册数。
select cno,count(bno) as 册数 from BORROW group by cno having count(bno)>5
(2)查询过期未还图书,输出借阅者(卡号)、书号及还书日期。
select cno as 卡号,bno as 书号,rdate as 还书日期 from borrow where borrow.rdate<GETDATE()
(2) 查询书名包括“网络”关键词的图书,输出书号、书名、作者。
select bno,bname,author from books where bname like '%网络%'
(4)查询现有图书中价格最高的图书,输出书名及作者。
select bname,author from books where price=(select MAX(price) from books)
2、有一个[学生课程]数据库,数据库中包括三个表:
学生表:Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,记为:Student(Sno,Sname,Ssex,Sage,Sdept),Sno 为关键字。
课程表:Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)四个属性组成,记为: Course(Cno,Cname,Cpno,Ccredit) Cno为关键字。
成绩表:SG由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,记为: SG(Sno,Cno,Grade) (SNO, CNO) 为关键字。
用SQL语言实现下列功能:
(1) 建立学生表[Student],其中学号属性不能为空,并且其值是唯一的。
create table Student
(
Sno char(5) primary key,
Sname char(10),
Ssex char(2) default '男' check (Ssex in ('男','女')),
Sage int,
Sdept varchar(10)
)
(2) 查询考试成绩有不及格的学生的学号。
select distinct Sno from SG where Grade<60
(3) 将学号为05001学生的年龄改为22岁。
update T_Student set Sage=22 where Sno='05001'
(4) 计算1号课程的学生平均成绩。
select AVG(Grade) from SG group by Cno having Cno=1
(5) 创建存储过程[getDetailByName],通过输入参数学生姓名(如 “张三”),筛选出该学生的基本信息,对不存在此学生姓名的输入值,打印信息“不存在此学生”。
create proc getDetailByName
@name char(10)
as
if exists(select * from Student where Sname=@name)
begin
select * from Student where Sname=@name
end
else
begin
print '不存在此学生'
end
exec getDetailByName 'xxx'
3、现有关系数据库如下:
数据库名:教师数据库
教师表(编号,姓名,性别,民族,职称,身份证号)
课程表(课号,名称)
任课表(ID,教师编号,课号,课时数)
用SQL语言实现下列功能:
(1) 创建上述三张表, 要求使用:主键(教师表.编号,课程表.课号)、外键(任课表.教师编号,任课表.课号)、默认(民族)、非空(民族,姓名)、唯一(身份证号)、检查(性别、课时数),自动编号(ID)
create table 教师表
(
编号 char(10) primary key,
姓名 char(10) not null,
性别 char(2) default '男' check (性别 in ('男','女')),
民族 char(10) default '汉' not null,
职称 char(10),
身份证号 char(20) unique
)
create table 课程表
(
课号 char(10) primary key,
名称 char(20) not null
)
create table 任课表
(
ID int identity(1,1),
教师编号 char(10) references 教师表(编号),
课号 char(10) references 课程表(课号),
课时数 int not null check(课时数 between 0 and 200)
)
(2) 将下列课程信息添加到课程表的代码
课号 课程名称
100001 SQL Server数据库
100002 数据结构
100003 VB程序设计
SET IDENTITY_INSERT 课程表 ON insert into 课程表(课号,名称) values(100001,'SQL Server数据库') insert into 课程表(课号,名称) values(100002,'数据结构') insert into 课程表(课号,名称) values(100003,'VB程序设计')
(3) 创建任课表视图,查询教师编号,姓名,课号,课程名称与课时数信息。创建内嵌表值函数,检索所有上“SQL Server数据库”这门课程的老师姓名;
create view V_TeacherInfo as select t.编号,t.姓名,course.课号,course.名称,class.课时数 from 任课表 as class join 课程表 as course on class.课号=course.课号 join 教师表 as t on class.教师编号=t.编号
create function fn_CourseTeacher
(@course char(200))
returns table
as
return
(select 课程表.名称,教师表.姓名 from 任课表
join 教师表 on 任课表.教师编号=教师表.编号
join 课程表 on 课程表.课号=任课表.课号
where 课程表.名称=@course
)
go
select * from dbo.fn_CourseTeacher('SQL Server数据库')
(4) 创建存储过程,计算某教师代课总课时,并将值返回。
执行:计算“郭老师”的总课时。
create proc proc_TeachTime @name char(10),@time int output as select @time=sum(任课表.课时数) from 任课表 join 教师表 on 任课表.教师编号=@name go declare @time int exec proc_TeachTime '郭老师',@time output print @time
来源:https://www.cnblogs.com/jsit-dj-it/p/12069779.html