赞
踩
注
意
原版word在下载
资源里面
今日
感想
历经千万种悲伤
然后从悲伤种走出来
实验目的及要求:
实验内容及步骤:
以XSGL数据库中数据为基础,请使用T-SQL 语句实现以下操作:
select sname,sno--查询学生即查询学生姓名和学号
from student
where sname not like'刘%';--利用not like''语句筛选条件
select sname
where sname like'张__'and len(sname)=3;--“len()=”语句用来限制sname的长度
select sname,sno,sage,year(getdate())-sage yearsage--后面空一格表示给该列属性起的名字
where (year(getdate())-sage)>1993;--year(getdate())表示当前年份
select course.*,sno,grade--课程表和选课表包含课程的所有信息
from course,sc
where course.cno=sc.cno--课程表的cno是其主码,需要连接sc表中的cno外码
and cname like '数据%'
select sname,student.sno,grade--sno是student中的主码,grade在选课表中所以需要连接sc表中的sno外码
from student,sc--查询学生一般是指查询姓名学号
where cno='1'
order by grade desc--order by 对某属性进行排序,desc为倒序,acs为正序
select sno--课程号和学号在sc表中均有,所以不需要连接表
from sc
where cno='1'and--cno不能同时为1和2,所以再嵌套一个选了2号课程的语句
sno in(select sno from sc where cno='2');
select *
from course
order by cpno asc;--asc代表升序,也可以省略
select sname,sno,sage
where sage>(select avg(sage) from student)--where关键词后面不能跟聚合函数,所以嵌套一个表示平均值
order by sage desc;
select sno 学号,sname 姓名,ssex 性别,
year(getdate())-sage 出生年份,sdept 院系
order by year(getdate())-sage;
select student.sno,cno,grade
from student,sc
where student.sno=sc.sno and
grade>=70 and grade<80
order by cno,grade--两者顺序不能颠倒,不然结果会不一样
select count(sno) 学生总人数,--count表示计算行数,sno为学生表的主码,即唯一,所以计算学号个数
avg(sage) 平均年龄
select sno,count(sno)--只要求显示选修课程数,需要计算一个学号的行
group by sno--需要计算一个学号的行,对学号分组,则求得每个学生的选课数
having count(sno)>3;--不能用where,因为那是分组前的限制,分组前本来行就大于3所以起不到限制的作用,意思就是说一般group by和having连用
select cno 课程号,count(sno) 课程总人数,
max(grade) 最高成绩,min(grade) 最低成绩,
avg(grade) 平均成绩
group by cno--按照课程号进行,即对每一个课程进行统计,需要分组
order by cno desc;
select sdept 院系名称,count(case when ssex='男'then 1 end) 男生人数,--case when..then 1 end这里的1仅仅代表记号
count(case when ssex='女'then 1 end) 女生人数--当ssex=女时count加1,如果含有else 0 则无论男女count均加1造成女生数量与总人数相同
group by sdept;--各个院系,则需要对院系分组然后计算男女人数
select case when ssex='男' then '男生' when ssex='女' then '女生'
else '条件不明' end 性别,--case when ..then..when..then..else..end
sno 学号,sname 姓名,sage 年龄,sdept 院系
select sno,sname,ssex,sage,sdept
from student--[..]表示取框内任意一个
where sno like '_______[1,2,3,4,9]_' or sno like '________[1,2,3,4,9]';
select case when sdept='CS' then '计算机系'
when sdept='IS' then '信息系' when sdept='MA' then '数学系'
when sdept='EN' then '外语系 'when sdept='CM' then '中医系'
when sdept='WM' then '西医系'
else '院系不明' end
sno,sname,ssex,sage
order by sdept desc
select sdept 院系,case when count(sno)>=5 then '规模一般'
when count(sno)>=4 then '规模一般'
when count(sno)>=3 then '规模稍小'
else '规模很小' end--when 之间没有,且主义字符串要加''
where sdept is not null
group by sdept;--必须对院系进行分组
select sno,avg(grade) 平均成绩
group by sno--平均成绩需要分组确定每个学生
having avg(grade)>(select avg(grade) --分组后的限制语句having一般用聚合函数,聚合函数比较可以用嵌套表示另外一个聚合函数
from sc where sno='200515001')
from sc--不能先用where限制grade<60 否则无法计算>60的成绩
group by sno--必须对学号分组区分不同的学生
having count(case when grade<=60 then 1 end)>=2