1.利用SQL语句(命令方式)修改数据库student名称为ss。
【填写SQL命令】:sp_renamedb student,ss
2.利用SQL语句(命令方式)删除数据库teacher。
【填写SQL命令】:drop database ss
3.利用SQL语句(命令方式)修改课程管理数据库,将日志文件初始大小改为20MB,增长方式为20%。
alter database student
modify file(size=30, filegrowth=20%)
需要操作的表:
(一)DDL练习:用SQL(命令方式)完成以下操作(写出每小题的SQL命令)。
1.在数据表s中新增class字段,类型nchar,长度5。
alter table s
add class nchar(5)
2.修改数据表s中class字段名,改为sclass,长度由5修改为10。
Sp_rename ‘class’,’sclass’
alter COLUMN sclass char(10)
3.删除数据表s中的字段sclass。
alter table s
drop column sclass
4.删除数据表s。
drop table s
5.为c表的cname添加唯一值约束,约束名称为uq_cname。
alter table c add unique(cname)uq_cname
6.为s表定义check约束,sno为5位数字字符,且不能以0开头,第三位为0。
alter table s add check(sno like’[1-9][0-9][0][0-9][0-9]’)
7.为s表定义约束,ssex只能输入‘男’或‘女’。
alter table s add check(ssex in (‘男’,‘女’))
8.为s表的sage设置默认值20。
alter table s add default 20 for sage
9.为sc表设置外键cno,使之与c表的主键cno实现参照完整性:修改或删除c表的cno字段时,该字段在sc表中的对应值也应修改或删除。
alter table sc add constraint cno foreign key(cno) references c
(二)DML练习:用SQL方式(命令方式)完成以下操作。
1.将课程名为"DB_Design"的课程名修改为"数据库原理",将学分改为5分。
update c set cname=‘数据库原理’
where cno=‘1’
update c set ccredit=‘5’
where cname='数据库原理’
2.将学号为"12004"的同学所有成绩置0。
update sc set grade=‘0’
where sno='12004’
3.将选修"3"号课程所有同学的成绩减10分。
update sc set grade=grade-10
4.在SC中插入某个同学的选课信息(学号’12003’,课程号’1’)。
insert into sc(sno,cno)
values(‘12003’,‘1’)
5.删除成绩为null的选课信息。
select from sc
where grade is null*
(三)数据查询语言SQL
1.查询“MA”专业学生的基本信息。
【T-SQL查询语句】:
select * from s where ssex='女’
【查询结果】:
2. 查询年龄在18-20岁的女生学号、姓名、性别、年龄。
【T-SQL查询语句】:
select sno,sname,ssex,sage from s
where sage between 18 and 20
and ssex='女’
【查询结果】:
3.查询所有姓“李”的学生信息。
【T-SQL查询语句】:
select * from s
where sname like '李%'
【查询结果】:
4.查询课程名称包括“数据”的课程的课程号、课程名及学分。
【T-SQL查询语句】:
select cno,cname,ccredit from c
where cname like '%数据%'
【查询结果】:
5.查询成绩排名在最后一名的同学的成绩信息(如排名并列,同时显示并列成绩信息)。
【T-SQL查询语句】:
select * from sc
where grade in(
select top(1) grade from sc
order by grade
)
【查询结果】:
6.查询成绩排名在第一名的同学的学号、姓名及专业(如排名并列,同时显示并列同学的信息)。
【T-SQL查询语句】:
select s.sno,sname,sdept from s,sc
where s.sno=sc.sno
and grade in(
select top(1) grade from sc
order by grade desc
)
【查询结果】:
7.查询年龄超过平均年龄的学生信息。
【T-SQL查询语句】:
select * from s
where sage>all(
select avg(sage) from s
)
【查询结果】:
8.查询选修课程超过3门的学生姓名及专业。
【T-SQL查询语句】:
select sname,sdept from s,(
select sno,count() 选课数 from sc
group by sno
having count()>3
) as q
where s.sno=q.sno
【查询结果】:
9.查询CS专业每个同学的学号、姓名及其选修课程的平均成绩。
【T-SQL查询语句】:
select s.sno,sname,平均成绩 from s,(
select sno,avg(grade) 平均成绩 from sc
group by sno
)as avggrade
where s.sno=avggrade.sno
【查询结果】:
10.查询各专业学生人数,查询结果列标题指定为“院系,人数”,并将结果按人数由低到高排列。
【T-SQL查询语句】:
select sdept 院系,count() 人数 from s
group by sdept
order by count()
【查询结果】:
11.查询至少有2门课程不及格的学生学号及姓名。
【T-SQL查询语句】:
select s.sno,sname from s,(
select sno,count(*) 不及格数 from sc
where grade<60
group by sno
)as low
where s.sno=low.sno
【查询结果】:
12. 查询没有选课的学生信息。
【T-SQL查询语句】:
select distinct s. from s left join sc on s.sno=sc.sno
where cno is null*
【查询结果】:
13.查询选修了课程“数据结构”的学生的姓名及成绩,结果按成绩由高到低排列。
【T-SQL查询语句】:
select sname,grade from s,(
select sno,grade from c,sc
where c.cno=sc.cno
and c.cname=‘数据结构’
)as datastruct
where s.sno=datastruct.sno
order by grade desc
【查询结果】:
14.查询同时选修了课程号为"3"和"5"号这两门课的学生的学号和姓名。
【T-SQL查询语句】:
select s.sno,sname from s,
(
select sno from sc
where cno=3
intersect
select sno from sc
where cno=5
)as sel35
where s.sno=sel35.sno
【查询结果】:
15.查询选修了全部课程的学生的姓名(提示:此题在教材原表中无符合条件的数据,建议删除c表中’6’号课程的信息后,再进行查询操作)。
【T-SQL查询语句】:
select sname from s,(
select sno from sc
group by sno
having count() =(
select count() from c
)
)as allselect
where s.sno=allselect.sno
(四)数据库安全管理
1.将登录名u11,u12添加为学生管理数据库的用户,用户名分别为u11,u12。
create user u11 for login u11
create user u12 for login u12
2.授权u11拥有s表的查询权限。
【T-SQL命令或操作过程截图】:
use student
grant select on s to u11
3.授权u11拥有sc表成绩列(grade)的修改权限,并可将此权限传播。
【T-SQL命令或操作过程截图】:
use student
grant update on sc(grade) to u11 with grant option
7.收回u11,u12对sc表成绩列(grade)的修改权限。
【T-SQL命令或操作过程截图】:
revoke update on sc(grade) to u11 cascade
3.创建一个名为“proc_3”的存储过程,对输入的成绩进行等级判定,输出相应的等级。60分以下为“不及格”,60-79为“及格”,80-89为“良好”,90分以上为“优秀”。然后调用该存储过程。
如调用存储过程exec proc_3 60,输出判定结果:及格。
【编写存储过程】:
create proc proc_3
@grade int
as
print
case
when @grade<60 then’不及格’
when @grade>=90 then ‘优秀’
when @grade>=80 then ‘良好’
when @grade>=60 then ‘及格’
else’输入错误’
end
exec proc_3 44
exec proc_3 89