【Sql Server学习】Sql Server数据查询、数据更新、视图、权限管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010800530/article/details/44162967

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');

回答:不可以,因为才开始对它们进行赋值了权限,但是后来又使用了revokeSELECT权限进行了收回。

猜你喜欢

转载自blog.csdn.net/u010800530/article/details/44162967