1、数据查询:在学生-课程数据库中用SQL指令完成以下查询
(1)查询选修了所有课程的学生姓名。
select sname from student
where not exists
(select * fromcourse
where notexists
(select* from sc
where sno=student.sno
and cno=course.Cno))
(2)查询至少选修了学号为200215122的学生所选的所有课程的学生姓名。
select distinct sname
from student,sc
where not exists
(select* from sc s1
where s1.sno='200215122' and
not exists
(select* from sc s2
where s2.sno=s1.sno and
s2.cno=s1.cno))
(3)实现集合并运算,查询选修“数据库”课程或“信息系统”课程的学生学号。
select sno from sc
where cno =(select cno fromcourse where cname='数据库')
union
select sno from sc
where cno =(select cno fromcourse where cname='信息系统')
(4)实现集合交运算,查询既选修了“数据库”又选修了“信息系统”的学生学号。
select sno from sc
where cno =(select cno fromcourse where cname='数据库')
intersect
select sno from sc
where cno =(select cno fromcourse where cname='信息系统')
(5)实现集合差运算,查询选修了“信息系统”而没有选修“数据库”的学生学号。
select sno from sc
where cno =(select cno fromcourse where cname='信息系统')
except
select sno from sc
where cno =(select cno fromcourse where cname='数据库')
2、数据更新:在学生-课程数据库中按要求进行数据更新
(1)使用SQL语句向Student表中插入元组(学号:200715111,姓名:张三,性别:男,年龄:17,所在系:IS)
insert into student (sno,sname,ssex,sage,sdept) values('200715111','张三','男','17','IS')
(2)两种实现数据复制的方法:对每门课程,求学生的选课人数和学生的平均成绩,并把结果存入数据库。使用SELECT INTO和INSERT INTO两种方法实现。(提示:SELECT INTO FROM语句形式为:SELECT vale1, value2 into Table2 from Table1要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。用INSERT INTO语句实现要求先创建一个课程选课情况表,包括课程名,选课人数,平均成绩字段,然后再用INSERT INTO语句实现数据的复制)
SELECT INTO:
select cno,count(cno)as '选课人数',avg(grade) as '平均成绩'
into kecheng
from SC
group by cno
INSERT INTO:
insert into ke(课程号,选课人数,平均成绩)
select cno,选课人数,平均成绩from kecheng
(3)在Student表中使用SQL语句将“赵乐乐”的性别改为“女”。
update student set ssex='女'
where sname='赵乐乐'
(4)在SC表中使用SQL语句将所有学生的数学成绩低于70分的成绩上浮5%。
update sc
set grade=grade*(1+0.05)
where sno in(
select sno
from sc
where cno =
(select cno from course where cname='数学')
)
and cno =(select cno fromcourse where cname='数学')
(5)将“刘晨”的“信息系统”课程成绩加上5分。
update sc
set grade=grade+5
where sno=(select sno fromstudent where sname='刘晨')
and cno=(select cno from course where cname='信息系统')
(6)将200215121号学生所选修的课程全部改成由“王敏”选修。
没看懂意思
(7)在Student表中使用SQL语句删除“张三丰”的信息。
delete from sc
where sno=(select sno fromstudent where sname='张三丰')
delete from student
where sname='张三丰'
(8)删除没有学生选修的课程。
delete from course
where cno not in(select cno from sc)
(9)删除没有选修课程的学生信息。
delete from student
where sno not in(select sno from sc)
(10)删除所有选修“PASCALL”课程的选课记录。
delete from sc
where cno =(
select cno from course
where cname='PASCALL')
3、创建和修改视图,在学生-课程数据库中按要求创建如下视图
在学生-课程数据库中按要求完成下列实验:
(1) 创建一个行列子集视图CS:给出选课成绩合格的学号,所选课程号和成绩。
create view cs
as
select sno,cno,grade
from sc
where grade>60 or grade=60
(2) 创建基于多个基本表的视图CSN:由学生姓名和他所选修的课程名及成绩构成。
create view csn
as
select sname,cno,grade
from student,sc
where student.sno=sc.sno
(3) 创建分组带表达式的视图:由学生姓名,选修课程的门数、平均成绩这几个属性组成。
create view c
as
select sname,count(*)as '选课门数',avg(grade) as'平均成绩'
from student,sc
where student.sno =sc.sno
group by sname
(4) 创建一个基于视图的视图,基于(1)建立的视图CS,定义一个成绩合格的包括学生学号,学生所选成绩合格课程数和平均成绩的视图。
select sno,count(*) as '合格课程数',avg(grade) as '平均成绩'
from cs
group by sno
(5) 插入元组(200215123,1,80)到视图CS中。修改CS视图,加上WITH CHECK OPTION选项,然后插入元组(200215123,2,55),数据能否成功插入,说明WITH CHECK OPTION选项,则对插入操作有何影响?
insert into cs(sno,cno,grade) values ('200215123','1','80')
不能
在插入的时候,如果不符合限制,则会报错
(6) 删除视图CS和CSN
drop view cs
drop view csn
4、用户权限分析:以SA身份登录新建查询,输入并执行下面代码:
/*1*/ sp_addlogin 'li', '123456';
/*2*/ USE St
/*3*/ sp_grantdbaccess 'li', 'happyli';
/*4*/ GRANT SELECT, INSERT, UPDATE ON Student TO public ;
/*5*/ GRANT ALL ON Student TO happy li;
/*6*/ REVOKE SELECT ON Student FROM happyli ;
/*7*/ DENY UPDATE ON Student TO happyli ;
回答下面问题:
若以帐号li登录服务器,能否对St数据库的Student表进行SELECT、INSERT、UPDATE操作,为什么?可用下列语句验证(注意以帐号“li”登录):
USE St
SELECT *FROM Student ;
UPDATEStudent SET Sage=19 WHERE Sdept='MA' ;
INSERTINTO Student VALUES ('200215111', '张三','男', 18, 'IS');
回答:不可以,因为才开始对它们进行赋值了权限,但是后来又使用了revoke对SELECT权限进行了收回。