use xsgl
--5月4日实验要求
--一:对学生库的查询要求 :
--1.    查询有直接先行课的课程的课号,课名和先行课号。
select 课程号,课程名,先行课号
from kc
where 先行课号 is not null
--2.    查询先行课号是“5”号课程的课号和课名
select 课程号,课程名
from kc
where 先行课号='5'
--3.    查询所有的软件工程系姓李的同学的学号和姓名
select 学号,姓名
from xs
where 专业='软件工程'
    and 姓名 like '李%'
--4.    查询不在软件工程和数学系学习的学生的学号和姓名,系别
select 学号,姓名,专业
from xs
where 专业 not in ('软件工程','数学')
--5.    查询年龄不在18-21之间的软件工程系的学生的学号,姓名和年龄
select 学号,姓名,年龄=DATEDIFF(YEAR,出生时间,GETDATE())
from xs
where DATEDIFF(YEAR,出生时间,GETDATE()) not between 18 and 21 and 专业='软件工程'
--6.    查询没有选修‘1’号课程的学生的学号(注意去掉重复的元组)
select distinct 学号 from cj where 学号 not in
(select 学号 from cj where 课程号 in ('J001'))
--7.查询每个学生的学号,姓名,出生年份,并给出生年份起别名为chusheng
select 学号,姓名,year(出生时间)as chusheng
from xs
--7.    查询信息管理系选修英语的平均成绩
select 英语平均成绩=AVG(成绩)
from xs,cj,kc
where xs.学号=cj.学号
    and cj.课程号=kc.课程号
    and 专业='信息管理'
    and 课程名='英语'
--8.    查询每个学生的学号,姓名,以及选修课程的课号和课名,成绩(包括没选课的学生已经没有被选修的课程)
select xs.学号,姓名,kc.课程号,课程名,成绩
from xs full join cj on xs.学号=cj.学号 full join kc on cj.课程号=kc.课程号
   
--9.    查询和王燕年龄相同的学生的学号,姓名和年龄
sql语句查询不包含select c2.学号,c2.姓名,年龄=YEAR(GETDATE())-year(c2.出生时间)
from xs c1,xs c2
where YEAR(GETDATE())-year(c2.出生时间)=YEAR(GETDATE())-year(c1.出生时间)
    and c1.姓名='王燕'
    and c2.姓名<>'王燕'
--10.    查询选修英语的学生的学号和 姓名(包括没有选课的学生)
select xs.学号,姓名,课程名
from xs left join cj on xs.学号=cj.学号 left join kc on cj.课程号=kc.课程号
where 课程名='英语' or 课程名 is null
   
--11.    查询各个专业的男同学与女同学的人数,查询结果显示专业,性别和人数
select 专业,性别,人数=COUNT (*)
from xs
group by 专业,性别
--12.    查询所有选修数据库的姓王与姓李的同学的学号与姓名
select xs.学号,姓名
from xs,cj,kc
where xs.学号=cj.学号
    and cj.课程号=kc.课程号
    and 课程名='数据库SQL Server'
    and 姓名 like '[王,李]%'
--13.    查询每门课的课号课名以及该课程的选修人数和平均分与最高分
select kc.课程号,课程名,选修人数=COUNT(学号),平均分=AVG(成绩),最高分=MAX(成绩)
from cj right join kc on cj.课程号=kc.课程号
group by kc.课程号,课程名
--14.    查询每个专业选修英语的同学的人数和最高分
select 专业,英语人数=COUNT (*),英语最高分=MAX (成绩)
from xs,cj,kc
where xs.学号=cj.学号
    and cj.课程号=kc.课程号
    and 课程名='英语'
group by 专业
--15.    查询没有选课的学生的学号和姓名
select 学号,姓名
from xs
where 学号 not in (select distinct 学号 from cj )
--16.    查询选修了6门以上课程的学生的学号和姓名
select 学号,姓名
from xs
where 学号 in(select 学号 from cj group by 学号 having COUNT (*)>6)
select xs.学号,姓名
from xs,cj
where xs.学号=cj.学号
group by xs.学号,姓名
having COUNT (*)>6
--17.    查询每个专业选修英语的人数,并显示明细
select *
from xs,cj,kc
where xs.学号=cj.学号
    and cj.课程号=kc.课程号
    and 课程名='英语'
order by 专业
compute COUNT(专业) by 专业
--18.    查询有间接先行课的每门课的课号,课名以及该课程的间接先行课名
select c1.课程号,c1.课程名,间接先行课=c2.先行课号
from kc c1,kc c2
where c1.先行课号=c2.课程号
    and c2.先行课号 is not null

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。