zoukankan      html  css  js  c++  java
  • Server SQL 2008 练习—02

    一、修改数据库

    1)给db_temp数据库添加一个数据文件文件db_temp1指定大小为5MB,最大文件大小为100mb,自动递增大小为1MB,存储路径为d:

    利用系统存储过程sp_helpdb查看db_temp数据库系统信息

    Alter database db_temp
    
    Add file
    
    (name=’db_temp1’,filename=’d: db_temp1.ndf’,size=5,filegrowth=1,maxsize=100)

    Sp_helpdb db_temp

    2)给db_temp数据库添加一个日志文件db_temp1-log文件,指定大小为5MB,最大文件大小为不限定大小,自动递增大小为10%,存储路径为d:

    1 Alter database db_temp
    2 
    3 Add log file
    4 
    5 (name=’ db_temp1-log’,
    6 
    7 filename=’d: db_temp1-log.ldf’,size=5,filegrowth=10%,maxsize=unliminted)

    (3)db_temp数据库添加一文件组 hh,利用系统存储过程sp_helpdb查看db_temp数据库系统信息

    1 Alter database db_temp
    
    3 Add filegroup hh
    

     (4)、 db_temp数据库添加一数据文件db_temp2(该文件属性自定)到hh

    Alter database db_temp
    
    Add file
    
    (name=’db_temp2’,filename=’d: db_temp2.ndf’,size=5,filegrowth=1,maxsize=100) to filegroup hh

     (3)修改db_temp数据库中的数据文件db_temp1,之后利用系统存储过程sp_helpdb查看db_temp数据库系统信息

    Alter database db_temp
    
    Modify file
    
    (name= db_temp1,size=10,maxsize=500)—修改了该数据库中的db_temp1文件,修改了该文件的大小和最大大小

     

    4)删除db_temp数据库中一个数据文件db_temp1,一个日志文件db_temp1-log

    Alter database db_temp
    
    remove file db_temp1
    
     
    
    Alter database db_temp
    
    Remove  file db_temp1-log

    7) 删除文件组hh

    Alter database db_temp
    
    Remove filegroup  hh

     

    8)用SQL命令删除数据库db_temp

    Drop database db_temp

    二、管理数据表

    1、附加数据库temp-db ,并利用存储过程 sp_renamedb ‘愿数据库名’,‘新数据库名’   , 将该数据库重命名为stu

     sp_renamedb  'temp-db ' ,’ stu’

    2、利用存储过程sp_rename '原表名','新表名'  ,依次将该stu数据库的student 重命名为s,  course重命名为c  ,s-c 重命名为sc    

       sp_rename ' student' ,’ s’  
    
    sp_rename 'course' ,’ c’  
    
    sp_rename ' s-c ' ,’ sc’      


                

    3.使用sql 命令在stu数据库中,分别按以下要求补充三个关系,设置对应表的主键,外键和约束关系。                  

                                T

    列名

    数据类型

    约束

    TNO

    Varchar20

    主键,并只能以T开头

    tn

    Varchar20

    非空

    sex

    Char(2)

    age

    tinyint

    30-65

    prof

    Varchar(50)

    只能是教授,副教授,讲师,助教

    sal

    money

     

    comm

    smallmoney

     

    dept

    Varchar(50)

    计算机

                                Tc

    列名

    数据类型

    约束

    备注

    tno

    Varchar20

    外键

    Tno+cno

    主键

    cno

    Char(8)

    外键

                                User表

    列名

    数据类型

    约束

    备注

    ID

    INT

    主键

    标识列,自动增长,种子为1,增量为1

    Username

    Varchar20

    不能重复

     

    password

    Varchar(50)

    非空

     

    Create table  t
    
    (TNO Varchar(20) primary key  check (tno like 't%'),
    
    tn Varchar(20) not null,
    
    sex Char(2) default '',
    
    age tinyint check (age between 30 and 65),
    
    prof Varchar(50)  constraint xx check (prof in ('教授','副教授','讲师','助教' )),
    
    sal money,
    
    comm smallmoney,
    
    dept Varchar(50) default '计算机') 
    
     
    
    create table tc 
    
    (tno Varchar(20) foreign key references t(tno),
    
    cno Char(8) foreign key references c(cno)
    
    primary key (tno,cno) )
    
    create table [user]
    
    (id int identity(1,1) primary key,
    
    Username Varchar(20),
    
    password Varchar(50)
    
    )

    4s表添加手机号列家庭住址列身份证号要求手机号只能是-9之间的字符且长度为位

    家庭住址不能为空,身份证号要求不能为空且不能重复 

    alter table s 
    
    add tel char(11) check (tel like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
    
    addr varchar(50) not null,
    
    sfzh varchar(20) not null unique

    5s表添加一唯一约束到姓名列一默认约束到姓别列要求默认值为

    alter table s 
    
    add unique(sn),
    
    default '' for sex

    6删除t表中的prof列上的约束

    alter table t
    
    drop constraint xx 

    7删除s表与sc 表之间的关联再通过命令重新建立其关联

    alter table sc
    
    drop constraint 外键约束的名称 
    
     
    
    alter table sc 
    
    add foreign key (sno) references s(sno)

    三、表单查询


    1.查询全体学生的学号和姓名

    select sno,Sn from s


    2.查询考试有不及格的学生学号,若有多门不及格,相同的学号只显示一个。

    select distinct sno from Sc where score<60


    3.查询年龄在20岁以下的所有女生的姓名和性别

    select Sn,sex from s where age<20 and sex=''


    4.查所有第二个字为小或晓的学生学号和姓名

    select sno,Sn from s where Sn like '_[小晓]%'


    5.查所有不姓王的学生姓名

    select Sn from s where Sn not like '王%'


    6.查计算机系,自动化系的学生姓名和性别

    select Sn,sex from s where dept in ('计算机','自动化')


    7.查所所有学生的姓名及出生年份,并为对应列给别名

    select Sn,year(GETDATE()) 出生年份 from s 


    8.查询姓王或李的学生姓名和所在系

    select Sn,dept from s where Sn like '[王李]%'


    9.查询所有选了课的学生学号,要求选了多门课的学生学号只显示一次

    select distinct sno from Sc


    10.查询分数为80,90分的学生选课记录

    select * from Sc where score in (80,90)


    11.查询以'编'开头的,且倒数第2个为'原'的课程信息

    select * from C where cn like '编%原__%'


    12.查询工资在1000--2000元之间(含1000,2000)的计算机系教师的信息

    select * from t where sal between 1000 and 2000

    四、函数使用


    1、统计c2 课程的缺考学生人数

    select count(sno) from sc
    where cno='c2' and score is null


    2、查询选了课的学生人数

    select count(distinct sno) from sc 


    3、查询s1同学的总分,平均分,最高分,最低分,已经最高分和最低分之间的差值

    select sum(score),avg(score),max(score),
    min(score),max(score)-min(score)
    from sc where sno='s1'


    4、查询刘伟老师的总收入,要求输出教师号,总收入

    select tno,sal+comm 总收入 from t
    where tn='刘伟'
    
    select tno,sum(sal+comm)总收入 from t
    where tn='刘伟'
    group by tno 




    5、统计sc表中每门课程的补考人数,要求显示课程号,补考人数

    select cno,count(sno)补考人数
    from sc
    where score<60 or score is null
    group by cno 




    6、查询每门课程的平均分和最高分

    select avg(score),max(score) from sc
    group by cno 


    7、统计男生和女生的人数,显示性别和人数,并按人数升序排。

    select sex,count(sno) from s
    
    group by sex
    order by count(sno) asc 



    8、查询每个学生所选课程的平均分,并分别为这两列取别名为学号,平均分。

    select sno 学号,avg(score)平均分
    from sc
    group by sno 


    9、查询选修了c2课程的学生学号与成绩,按成绩降序排列。

    select sno,score
    from sc
    where cno='c2'
    order by score desc 


    10、查询各系不同职称的男女老师的人数

    select sno,score
    from sc
    where cno='c2'
    order by score desc 



    11、查询选修了2门课以上课程的学生的学号和总成绩,按总成绩降序排序。

    select sno,sum(score)
    from sc
    group by sno
    having count(cno)>2


    12、查询平均分在75分及以上的课程号;

    select cno from sc
    group by cno
    having avg(score)>=75


    13、查询计算机系收入高于8000的教师的教师名

    select tn from t
    where dept='计算机'
    group by tn
    having sum(sal+comm)>8000
    
    select tn from t
    where dept='计算机'
    and comm+sal>8000



    14、查询计算机系,电子系讲师职称的教师人数

    select count(tno) from t
    where (dept='计算机'or dept='电子')
    and prof='讲师'
    group by dept
    
    select count(tno)
    from t group by dept,prof  having
    ((dept='计算机'or dept='电子')and prof='讲师')

     五、多表查询


    1、连接查询


    (1)from 表1,表2... where 连接条件--内连接
    (2)表1 join 表2 on 连接条件join 表3 on                 连接条件 .....--内连接
     (3)表1 left|rightjoin 表2 on 连接条件 left|rightjoin 表3 on           连接条件 .....--外连接

    内连接:显示满足连接条件的元祖
    外连接:显示满足连接条件的元祖,以及左表或右表不满足连接条件的元祖

    s,sc
    from s,sc where s.sno=sc.sno
    s join sc on s.sno=sc.sno --内连接
    ========================================
    s,sc
    s left join sc on s.sno=sc.sno --左外连接

    sc right join s on s.sno=sc.sno--右外连接


    1、查询选了课的学生学号,姓名 s,sc

    select s.sno,sn from s,sc where s.sno=sc.sno
     select s.sno,sn
     from s join sc on s.sno=sc.sno


    2、查询没有选课的学生学号和姓名s,sc

    select s.sno,sn
     from s left join sc on s.sno=sc.sno
    where cno is null


     3、查询选了数据库课程的学生姓名s,sc,c

    select sn  
    from s,sc,c where s.sno=sc.sno and sc.cno=c.cno and cn='数据库'
    
    select sn
    from
    s join sc on s.sno=sc.sno join c on c.cno=sc.cno
    where cn='数据库'


    4、查询刘伟老师所教课程的课程名 c,t,tc

    select cn from t,tc,c where t.tno=tc.tno
    and tc.cno=c.cno and tn='刘伟'



    5、查询每个学生姓名,选课门数 s sc

    select sn,count(cno)
    from
    s left join sc on s.sno=sc.sno
    group by sn 



    6、查询跟赵亦在同一个系的学生姓名 s s

    select x.sn
    from s x,s y where x.dept=y.dept  and y.sn='赵亦' and x.sn<>'赵亦'


     
    7、查询比钱尔大的学生姓名 s,s

    select x.sn
    from s x,s y where x.age>y.age  and y.sn='钱尔'

     六、查询


    (1)、连接查询:


    1、查询李力老师所教课程的课程名

    select cn from C,t,tc where t.tno=tc.tno and C.cno=sc.cno and tn='李力'


    2、查询计算机系选了数据库课程的学生姓名

    select sn from s,sc,c where S.sno=sc.sno and c.cno=sc.cno and dept='计算机' and cn='数据库'


    3、查询选了c1或c2课程的学生学号,姓名

    select s.sno,sn from s,sc where s.sno=sc.sno and cno in ('c1','c2')


    4、查询教了计算机系学生且职称为教授的老师的姓名,职称,工资

    select sn,prof,sal from t,tc,sc,s where t.TNO=tc.tno and sc.cno=tc.cno and s.sno=sc.sno
    and dept='计算机' and prof='教授'


    5、查询各系的平均成绩要求显示系别,平均成绩,并按平均成绩降序排序。

    select dept,AVG(score) from s,sc where s.sno=sc.sno group by dept
    order by AVG(score) desc 


    6、查询平均成绩在80分以上的课程号,课程名

    select c.cno,cn from c,sc where c.cno=sc.cno group by c.cno
    having AVG(score)>80


    7、查询跟刘伟老师职称相同且工资相同的老师的姓名,职称,工资

    select x.tn,x.prof,x.sal from t x,t y where x.prof=y.prof and x.sal=y.sal and y.tn='刘伟'
    and x.tn<>'刘伟'


    8  用SQL实现S,SC表的自然连接

    select s.*,cno,score from s,sc where s.sno=sc.sno .


    9、查询没有学生选的课程的课程号,课程名

    select c.cno,cn from c left join sc on sc.cno=c.cno
    where cno is null


    10、查询所有学生的姓名,选课门数

    select sn,COUNT(cno) from s left join sc on s.sno=sc.sno group by sn 


    11、查询数据库,程序设计两门课程的总分,平均分

    select cn,SUM(score),AVG(score) from c,sc where c.cno=sc.cno  and cn in ('数据库','程序设计')group by  cn


    二、(子查询)

    1、查询选了C1课程的学生姓名
    思路一:从sc表中找出所有选了c1课程的学生学号,再根据学号到s表中找出对应的学生姓名

    select sn from s where SNO in (select SNO from SC where CNO='c1')


    思路二:以此到s表中判断每个学生是否选c1课程--相关子查询

    select sn from s
    where 'c1' in (select cno from SC where SNO=s.SNO )
    或
    select sn from s where  exists(select * from SC where SNO=s.SNO and CNO='c1')


    2、查询王伟老师所教课程的课程号


    思路一:先从t表中找到刘伟老师的教师号,再利用该教师号到tc表找到该老师所教课程号

    select cno from TC where TNO =(select TNO from t where tn='王伟')


    思路二:依次到c表中去判断课程是否由王伟老师讲授

    select cno from c  where  '刘伟' in (select tn from t where tno in (
    select tno from TC where CNO=C.cno))--不带exists 或not exists的相关子查询
    select cno from C where exists(select * from  TC ,t where TC.TNO=t.tno  and CNO=c.cno
    and tn='刘伟')--带exists的相关子查询


    3、查询赵亦选的课程名。
    思路一:先找到赵亦的学号,再根据学号去找该学生所选的课程号,最后根据课程号找对应的课程名

    select cn from C
    where CNO in (select CNO from SC where SNO =(select
    SNO from s where SN='赵亦') )--普通子查询


    思路二:以此到c表中去判断该们课程是否被赵亦选修

    select cn  from C where '赵亦' in (select sn from s,SC where s.SNO=SC.SNO and
    CNO=C.CNO )--不带exists 或not exists的相关子查询
    select cn from C where exists(select * from s,SC where s.SNO=SC.SNO and CNO=C.CNO
    and SN='赵亦')--带exists的相关子查询



    4、查询不学数据库的学生学号。
    思路一:先查找所有选了数据库的学号,找不属于这个集合的学生学号--普通子查询

    select sno from s where SNO not in
    (select sno from SC
    where CNO  =(select CNO from C where CN='数据库'))--普通子查询


    思路二:用所有学生的学号减去选了数据库的学生学号

    select sno from s
    except
    select sno from s where SNO in (select SNO from SC where CNO =(
    select CNO from C where CN='数据库'))


    思路三:依次到s表中去判断每个学生是否选了数据库--相关子查询

    select sno from s where '数据库'<> all(
    select cn from C,SC where C.CNO=SC.CNO and SNO=s.sno)
    或
    select sno from s where not exists(
    select * from C,SC where C.CNO=SC.CNO and CN='数据库' and SNO=s.sno)



    5、查询被t1和t3老师教了的课程的课程名


    思路一:先去找到被t1和t3老师所教课程的课程号,再根据课程号找对应的课程名

    select cn from C where CNO in (
    select CNO from TC where TNO='t1' and CNO  in (select CNO from TC where TNO='t3'))


    思路二:先找ti老师所教课程名,再找t3老师所教课程名,然后求其交集

    select cn from  C where CNO in ( select CNO from TC where TNO='t1')
    intersect
    select cn from  C where CNO in ( select CNO from TC where TNO='t3')


    思路三:依次到c表中判断每门课程是否被ti和t3教

    select cn from C where
    't1' in (select tno from TC  where  CNO=c.cno)
    and
    't3' in (select tno from TC  where  CNO=c.cno)


    思路四:不存在t1和t3 老师没有教的课程的课程名

    select cn from C where not exists( select *  from  (select * from  t where tno in ('t1','t3')) x
    where not exists(select * from  TC where TNO=x.tno and CNO=C.cno ))


    6、查询没有选修任何课程的学生姓名、所在院系


    思路一:选找到选了课的学生学号,然后再找不再这个集合中的学生学号,最后通过该学号找对应学生的姓名

    select sn,dept from s where SNO not in (
    select distinct SNO from SC )


    思路二:找选课门数=0的学生

    select sn,dept from S  
    where SNO in (select s.SNO from s left join SC on s.SNO=SC.SNO
    group by s.SNO
    having COUNT(cno)=0)


    思路三:以此从s表中去判断该学生是否选课--相关子查许

    select sn,dept from s where not exists(
    select * from SC where SNO=s.SNO )


    7、查询“数据库”课程的选课人数和总成绩。


    思路一:普通子查询

    select COUNT(sno),SUM(score) from SC
    where CNO =(select CNO from C where CN='数据库')


    8、查询其他系中比信息系某一学生年龄小的学生姓名和年龄。

    select sn,age from s where DEPT<>'信息' and AGE<any(select
    AGE from s where DEPT='信息')


    9、查询选了所有课程的学生信息


    思路一:先找选课门数=总课程数的学生学号,再根据学号找对应的学生信息

    select * from s where SNO in (select SNO from SC
    group by SNO  having COUNT(cno)=(
    select COUNT(cno) from C ))


    思路二:c表中没有一门课程是他没选的

    select * from s where not exists(
    select * from  C where not exists(select * from SC where s.SNO=SC.SNO and CNO=C.CNO ))


    10、查询计算机系微机原理成绩最好的学生的姓名


    思路一:先找符合条件的学生学号,再找姓名,注意此题中有三个条件

    select sn from s where DEPT='计算机'
    and SNO in (select SNO from SC,C where SC.CNO=C.CNO and CN='微机原理'
    and  score=(select MAX(score) from SC,C where SC.CNO=C.CNO and CN='微机原理'))


    思路二:依次到s表中判断每个学生是否符合以上条件--相关子查询

    select sn from s where  dept='计算机' and exists(select * from SC,C where SC.CNO=C.CNO and
    CN='微机原理' and SCORE=(select MAX(score)
    
    from SC,C where SC.CNO=C.CNO and CN='微机原理') and SNO=s.sno )

    七、更新操作:

    2)在s表中插入一条完整的纪录(记录自定义 )

    insert into S
    (SNO,SN,SEX,AGE,dept)
    values ('s7','李斯','',20,'信息')
    select * from s



    3)如果要在表SC中插入某个学生的选课信息(如:学号为“s3”,课程号为“c2”,成绩待定),应如何进行?

    insert into SC
    (SNO,CNO,score)
    values ('s3','c2',null)



    4)求各系学生的平均成绩,并把结果存入数据库;

    select dept,AVG(score) 平均成绩 into X
    from s left join SC on s.SNO=SC.SNO  
    group by DEPT
    select * from x



    5)s3同学的c5,c6,c7 三门课程的成绩分别是75,80,67 ,如何一次性将这些信息添加到sc表中 ?

    insert into SC (SNO,CNO,score)
    select 's3','c5','75'
    union
    select 's3','c6','80'
    union
    select 's3','c7','67'
    select * from sc



    6)将“计算机”系全体学生的成绩置零;

    update SC
    set SCORE=0
    where SNO in(select SNO from s where dept='计算机')
    select * from sc


    7)删除“计算机系”系全体学生的选课记录;

    delete from SC where SNO in (select SNO from s where DEPT='计算机')
    8)删除学号为“S1”的相关信息;并注意跟这个学生相关信息的变化
    delete from s where SNO='s1'
    select * from SC
    delete from sc where SNO='s1'
    select * from s  




    9)将学号为“S2”的学生的学号修改为“S002”;并注意跟这个学生相关信息的变化

    update s
    set SNO='s002'
    where SNO='s2'
    select * from sc 



    10)把平均成绩大于80分的男同学的入另一个表S_GRADE(SNO,AVG_GRADE);

    create table S_GRADE
    (SNO  varchar(20),AVG_GRADE float)
    insert into  S_GRADE
    select s.sno,AVG(score) from SC,s where SC.SNO=S.SNO and SEX=''
    group by s.SNO
    having AVG(score)>80


    11)把选修了课程名为“数据结构”的学生的成绩提高10%;

    update SC
    set SCORE=1.1*score
    where cno in (select cno from c where CN='数据结构' )
    select * from sc



    12)把选修了“C2”号课程,且成绩低于该门课程的平均成绩的学生的成绩提高5%;

    update SC
    set SCORE=SCORE*1.05
    where CNO='c2' and SCORE<(select AVG(SCORE) from SC where CNO='c2')
    select * from sc



    13)把选修了“C2”号课程,且成绩低于该门课程的平均成绩的学生成绩删除掉;

    delete from sc
    where CNO='c2' and SCORE<(select AVG(SCORE) from SC where CNO='c2')
    select * from sc

    八、权限控制:

    sp_addlogin 'uu','123'
    sp_addlogin 'nn','123'
    sp_adduser 'uu','uu1'
    sp_adduser'uu','uu2'


    1、写出如何让普通用户user1查询和使用t(tno,tn)进行查询和更新的权限--对象权限

    sp_addlogin 'mm','123'
    sp_adduser 'mm','user1'
    grant select,update on t(tno,tn) to user1  
    grant select(tno,tn),update(tno,tn) on t to user1
    
    revoke select,update on t(tno,tn) from user1



    2、将对计算机系学生进行查询和更新的权限给user2用户

    sp_addlogin 'xx','123'
    sp_adduser 'xx','user2'
    create view zz
    as
    select * from S where DEPT='计算机'
    with check option
    grant select,update on zz to  user2



    3、将查询dept权限给所有用户

    grant select on s to public
    4、将创建表的权限给普通用户user3,并使得user3获得传递权权限的能力--系统权限
    sp_addlogin 'yy','123'
    sp_adduser 'yy','user3'
    grant create table to user3 with grant option 



    5、创建角色role1,将查询和更新s,c,sc表的权限给角色role1

    sp_addrole 'role1'
    grant select,UPDATE on s to role1
    grant select,UPDATE on c to role1
    grant select,UPDATE on sc to role1


    6、将用户user1,user2添加到角色role1中,但不希望user1具备更新s,c,sc的权限,写出所有相关的过程

    sp_addrolemember 'role1','user1'
    sp_addrolemember 'role1','user2'
    deny update on s to user1--取消
    deny update on sc to user1
    deny update on c to user1


    7、如何让用户具有创建数据库的权限--添加用户到服务器角色中dbcreator

    sp_addsrvrolemember 'yy','dbcreator'--yy登录名添加到dbcreator服务器角色中


    8、如何让用户拥有数据中所有对象的所有权限--添加用户到指定的数据库角色中db_owner

    sp_addrolemember 'db_owner','user1'


    9、收回user3创建表的权限

    revoke create  table from user3  cascade --收回级联权限



    10、收回用户创建数据库的权限--删除服务器角色中的成员

    sp_dropsrvrolemember 'yy','dbcreator'--删除服务器角色成员


    11.如何收回用户拥有数据中所有对象的所有权限--删除数据库角色中的成员

    sp_droprolemember 'db_owner','user1'


    12、删除登陆用户

    sp_droplogin 'mm'


    13、删除数据库用户

    sp_dropuser 'user1'

    九、视图操作:

    以S , C , SC表为基础完成以下视图定义及使用。
    1)    定义“计算机”系学生基本情况视图V_IS 并查询结果;

    create view V_IS
    as
    select sno,sn,sex,age,dept from s where DEPT='计算机'
    with check option
    
    select * from  V_IS
    select * from s


    2)    将S,C,SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G 并查询结果;

    create view V_S_C_G
    as
    select s.sno,sn,c.cno,cn,score from  s left join SC on s.SNO=SC.SNO left join C on C.CNO=SC.CNO
    select * from V_S_C_G


    3)    将各系学生人数,平均成绩定义为视图V_NUM_AVG并查询结果;

    create view V_NUM_AVG
    as
    select dept,COUNT(sno) 人数,AVG(age)平均成绩  
    from s  left sc on s.sno=sc.sno
    group by dept


    4)    定义一个反映学生出生年份的视图V_YEAR并查询结果;

    create view V_YEAR
    as
    select *,year(GETDATE())-age 出生年份 from s


    5)    将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G并查询结果;

    create view V_AVG_S_G
    as
    select s.sno,COUNT(cno) 选修课程的门数,AVG(score) 平均成绩 from
    SC right join  s on s.SNO=SC.SNO
    group by s.SNO 


    6)    将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G并查询结果;

    create view V_AVG_C_G
    as
    select c.cno,COUNT(sno) 选修人数,AVG(score) 平均成绩 from
    C left join sc  on SC.CNO=C.CNO
    group by c.CNO 


    7)    查询平均成绩为90分以上的学生学号、姓名和成绩;  s sc V_AVG_S_G

    select * from V_AVG_S_G
    select s.sno,sn,score from s,SC, V_AVG_S_G where s.SNO=SC.SNO and s.SNO=V_AVG_S_G.sno
    and 平均成绩>90


    8)    查询各课成绩均大于平均成绩的学生学号、姓名、课程名 和成绩;  s c,sc V_AVG_C_G

    select * from  V_AVG_C_G
    select s.sno,sn,cn,score, 平均成绩 from V_S_C_G, V_AVG_C_G where  V_S_C_G.CNO=V_AVG_C_G.CNO  
    and SCORE>平均成绩


    9)    按系统计各系平均成绩在80分以上的人数,结果按降序排列; sc,s

    select  dept, COUNT(s.sno) from s,SC where s.SNO=SC.SNO
    group by  dept
    having AVG(score)>80
    order by  COUNT(s.sno) desc 




    10)    通过视图V_IS,分别将学号为“S1”和“S4”的学生姓名更改为“S1_MMM”,”S4_MMM” 并查询结果;

    update v_is
    set sn='S1_MMM'
    where sno='S1'
    
    
    update v_is
    set sn='S4_MMM'
    where sno='S4'
    
    
    select * from s



    11)    通过视图V_IS,新增加一个学生记录 ('S12','YAN XI',19,'计算机')

    insert into V_IS
    values  ('S12','YAN XI',19,'计算机')


    12)    通过视图V_IS,新增加一个学生记录 ('S13','YAN XI',19,'信息')

    insert into V_IS
    values  ('S12','YAN XI',19,'信息')
    --看不到该信息


    13)    通过视图V_IS,删除学号为“S12”和“S3”的学生信息

    delete from v_is
    where sno='s12' or sno='s3'


    14)    要通过视图V_S_C_G,将学号为“S12”的姓名改为“S12_MMM”,是否可以实现?

    select * from V_S_C_G
    update  V_S_C_G
    set sn='S13_MMM'
    where sno='ss'
    --可更新



    15)    要通过视图V_AVG_S_G,将学号为“S1”的平均成绩改为90分,是否可以实现?

    select * from V_AVG_S_G
    update V_AVG_S_G
    set 平均成绩=90
    where sno='s1'
    --不可更新

                                                                                                    2017-12-20、01:40:45

  • 相关阅读:
    李彦宏:创业成功五招即可
    JS无聊之作——换肤切换样式
    从3个科技公司里学到的57条经验(转载)
    早该知道的7个JavaScript技巧
    ASP.NET Cookie 概述
    曝光SEO高手藏在内心的SEO秘籍
    18种最实用的网站推广方法大全
    javascript的IE和Firefox兼容性问题
    增加反向链接的35个技巧
    常用JS片段
  • 原文地址:https://www.cnblogs.com/zhh19981104/p/8069689.html
Copyright © 2011-2022 走看看