基于SqlServer的DML(数据查询)实验,掌握select查询语句的使用、掌握有无条件查询、结果排序与分组、掌握视图用法

3 查询选修了课程的学生学号。其命令为:

–3查询选修了课程的学生学号

–因为没有选修表,先修课充当选修课

select distinct Sno as 学号 from Reports

where Cno in(select Cno from Courses where Pre_Cno is not null)

在这里插入图片描述

4查询数学系全体学生的学号(Sno)和姓名 (Sname)。其命令为:

select Sno,Sname from Students

where Sdept=‘数学’

在这里插入图片描述

5 查询所有年龄在18~22岁(包括18岁和22岁)之间的学生姓名(Sname)及年龄(Sage)。其命令为:select Sname as 姓名,Sage as 年龄 from Students

where Sage<=22 and Sage>=18

在这里插入图片描述

6 查询年龄不在18-22岁之间的学生姓名(Sname)及年龄(Sage)。其命令为:

select Sname as 姓名,Sage as 年龄 from Students

where Sage>22 or Sage<18

在这里插入图片描述

7 查询自动化系、数学和计算机系学生的学号(Sno)、姓名(Sname)和性别(Ssex)。其命令为:select Sno as 学号,Sname as 姓名,Ssex as 性别 from Students

where Sdept=‘自动化’ or Sdept=‘数学’ or Sdept=‘计算机’

在这里插入图片描述

8 查询所有姓刘的学生的姓名(Sname)、学号(Sno)和性别(Ssex)。其命令为:

select Sno as 学号,Sname as 姓名,Ssex as 性别 from Students

where Sname like ‘刘%’

在这里插入图片描述

9 查询课程名为“DB_设计”的课程号(Cno)和学分(Credits)。其命令为:

select Cno as 课程号 , Gredits as 学分 from Courses

where Cname=‘DB_设计’

在这里插入图片描述

10 查询以"DB_"开头,且倒数第2个汉字字符为“设”的课程的详细情况。其命令为:

select * from Courses

where Cname like ‘DB_%设_‘ESCAPE’’

在这里插入图片描述

11假设某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。试查询缺少成绩的学生的学号(Sno)和相应的课程号(Cno)。其命令为:

select Sno as 学生号,Cno as 课程号 from Reports

where Grade is NULL

在这里插入图片描述

12 查询全体学生情况,查询结果按所在系的系名(Sdpet)升序排列,同一系中的学生按年龄(Sage)降序排列。其命令为:

select * from Students

order by Sdept desc,Sage asc

在这里插入图片描述

13 查询学生总人数。其命令为:

select count(Sno) as 学生总人数 from Students

在这里插入图片描述

14 查询选修了课程的学生人数。其命令为:

select count(distinct Sno) as 人数 from Reports

where Cno in(select Cno from Courses where Pre_Cno is not null)

在这里插入图片描述

15 计算选修C01号课程的学生平均成绩。其命令为:

select avg(Grade)as C01课程平均成绩 from Reports

where Cno=‘C01’

在这里插入图片描述

16 查询选修C01号课程的学生最高分数。其命令为:

select max (Grade) as C01课程最高分 from Reports

where Cno=‘C01’

在这里插入图片描述

17 计算每门课程的平均成绩、最高分、最低分和总分。其命令为:

select Courses.Cname AS 课程名,avg(Reports.Grade) as 平均成绩,max(Reports.Grade) as 最高成绩,min(Reports.Grade) as 最低成绩

from Reports,Courses

group by Courses.Cname

在这里插入图片描述

第二部分:

1.从Students表中建立查询所有男(女)生信息的视图STU_SEX。视图的列名为SNO、SNAME、SSEX和SAGE。

代码: CREATE VIEW STU_SEX(SNO,SNAME,SSSEX,SAGE)

as Select Sno,Sname,Ssex,Sage from Students

在这里插入图片描述

2.从Courses表中建立查询所有课程先修课信息的视图课程Courses_PRE。视图的列名为课程号、课程名称和先修课名称。

代码:CREATE VIEW Courses_PRE(课程号,课程名称,先修课名称) AS

SELECT Cno,Cname,(select Cname from Courses as Courses1 where Courses1.Cno=Courses.Pre_Cno)

from Courses

在这里插入图片描述

3.从Reports表中建立查询成绩大于等于80信息的视图STU_CJ1。视图的列名为学号、课程号和成绩。

代码:CREATE VIEW STU_CJ1 as

select * FROM Reports

where Grade>80 OR Grade=80

在这里插入图片描述

4.从Students、Reports和Courses三个表建立查询学生选修情况的视图STU_CJ2。视图的列名为姓名、课程名称和成绩。

代码:CREATE VIEW STU_CJ2 as

select Students.Sname as 姓名,Courses.Cname as 课程名称,Reports.Grade as 成绩

from Students,Courses,Reports

where Reports.Sno=Students.Sno and Reports.Cno=Courses.Cno

在这里插入图片描述

5.从Students、Reports和Courses三个表建立查询学生选修情况并且成绩小于80的视图STU_CJ3。视图的列名为姓名、课程名称和成绩。

第5题是在第4题基础上修改的

代码:CREATE VIEW STU_CJ3(姓名,课程名称,成绩) as

select * from STU_CJ2

where 成绩<80

在这里插入图片描述

6.利用Transact-SQL命令修改视图STU_SEX。把视图的列名改为学号、姓名、性别

和年龄,加上“WITH CHECK OPTION”选项。

代码: alter view STU_SEX as

select Sno as 学号, Sname as 姓名, Ssex as 性别, Sage as 年龄 from Students

WITH CHECK OPTION

在这里插入图片描述

7.删除视图STU_CJ3。

drop view STU_CJ3

在这里插入图片描述

8.建立自动化系学生视图STU_Auto1,带有WITH CHECK OPTION。

Create view STU_Auto1 as

select * from Students where Sdept=‘自动化’

WITH CHECK OPTION

在这里插入图片描述

9.建立自动化系学生视图STU_Auto2。

该视图相比上一个视图不带WITH CHECK OPTION

Create view STU_Auto2 as

select * from Students where Sdept=‘自动化’

在这里插入图片描述

  1. 往STU_Auto1添加数据:

①学号为S15、姓名为陈婷、性别为女、年龄为21,自动化系;

insert into STU_Auto1 values(‘S15’,‘陈婷’,‘女’,21,‘自动化’)

②学号为S17、姓名为周奕、性别为女、年龄为21,计算机系。

插入失败

insert into STU_Auto1 values(‘S17’,‘周奕’,‘女’,21,‘计算机系’)

在这里插入图片描述

11.往STU_Auto2添加数据:

①学号为S18、姓名为陈大敏、性别为男、年龄为21,自动化系;

insert into STU_Auto2 values(‘S18’,‘陈大敏’,‘男’,21,‘自动化’)

②学号为S19、姓名为马小帅、性别为男、年龄为21,计算机系;

insert into STU_Auto2 values(‘S19’,‘马小帅’,‘男’,21,‘计算机系’)

注意:比较11题、10题,如遇到问题,分析原因,并解决之。

第11题中相比第10题中2条语句都能插入成功了,主要是因为第10题中第2条语句不满足视图创建时候WITH CHECK OPTION。语句中,要满足谓词也就是子查询中的条件Sdept=‘自动化’,如果想要解决问题可以修改视图,修改语句是把子查询语句中条件语句where Sdept=‘自动化’,语句去掉,或者插入时候Sdept,要满足部门名称都是自动化系的学生

修改语句是:alter view STU_Auto1 as

select * from Students

WITH CHECK OPTION

修改后:

在这里插入图片描述

12.在STU_Auto1上,修改陈婷的年龄为20。

update STU_Auto1 set Sage=20

where Sname=‘陈婷’

在这里插入图片描述

  1. 在STU_Auto2上,修改马小帅的年龄为20。

注意:比较13题、12题,如遇到问题,分析原因,并解决之。

update STU_Auto2 set Sage=20

where Sname=‘马小帅’

在这里插入图片描述

insert into STU_Auto2 values(‘S19’,‘马小帅’,‘男’,21,‘计算机’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值