马上考试了。。。SQL 把我的复习题 公布下吧~有的不会做哈~~
1`查询 年龄 大于 20岁的 女同学的 学号和姓名。select 学号,姓名 from s
where 姓名='女'and year(getdate())-year(出生日期)>20
2`查询 李老师所教的课程号·课程名
select 课程号,课程名 from c
where 教师 like '李%'
3`查询 学号为'j0301'所选秀的全部课程成绩
select * from sc
where 学号='j0301'
4`查询平均成绩都在80分以上的学生学号及平均成绩
select 学号,avg(成绩)as平均成绩 from sc
group by 学号
having avg(成绩) >80
5`查询 至少有6人选修的课程号
select 课程号 from sc
group by 课程号
having count(*)>6
6`查询c02号课程得最高分的学生的学号
select top 1 学号 from sc
where 课程号='c02'order by 成绩 desc
7`查询所有数学系学生的信息
select * from s
where 系='数学'
8`查询学号为'j0401'的学生选修的课程号和课程名
select 课程号,课程名, from c
where 课程号 in (select 课程号 from sc
where 学号='j0401')
9`'李小波'所选修的全部课程名称
select 课程名 from c
where 课程号 in (select 课程号 from sc
where 学号= (select 学号 from s
where 姓名 ='李小波'))
10`所有成绩都在70分以上的学生姓名及所在系
select 姓名,系 from s
where 学号 in (select 学号 from sc
group by 学号
having min(成绩)>70)
//第二种方法
select 姓名,系 from s
where 学号 (select 学号 from sc right join s on s.学号=sc.学号
where 成绩<70 )
11`英语成绩比数学成绩好的学生(自身连接)
SELECT S.* FROM S WHERE S.学号 IN
(SELECT SC.学号 FROM SC INNER JOIN SC1 ON SC.学号=SC1.学号 AND SC.成绩>SC1.成绩
AND SC.课程号=(SELECT 课程号 FROM C WHERE 课程名='英语') AND SC1.课程号=(SELECT 课程号 FROM C WHERE 课程名='数学'))
12.至少选修了两门课及以上的学生姓名和性别(可用嵌套查询)。
13.选修了李老师所讲课程的学生人数。
14.“操作系统”课程得最高分的学生的姓名、性别和所在系(可用嵌套查询)。
select 姓名,性别,系 from s,sc
15.显示所有课程的选修情况。
16.取出没有选修“操作系统”课程的学生姓名和年龄。
17.没有选修李老师所讲课程的学生。
18.取出选修了全部课程的学生和性别。
19.检索至少选修课程“数据结构”和“C语言”的学生学号。
20.检索学习课程号为C02的学生学号、姓名和所在系。
21.检索选修课程号C01或C02的学生学号、姓名和所在系。
22.检索至少选修课程号为C01和C03的学生姓名。
23.检索每个学生的年龄。
24.在学生基本信息表S中检索学生的姓名和出生年份,输出的列名为STUDENT_NAME和BIRTH_YEAR。
25`向学生选课数据表sc中插入一个元组(S0404,C06,90)
insert into sc
values ('S0404','c06','90')
26`把课程名为vb的成绩;从学生选课数据表sc中删除.
delete from sc
where 课程名='vb'
27`把女同学的成绩提高10%
update sc
set 成绩=成绩+10
where 学号 in (select 学号 from s
where 性别='女')
28·列出选修课程超过3门的学生姓名及选修门数
29`求选修各课程的学生的人数
30`在学生选课数据表SC中,求选修课程C01的学生的学号和得分,并将结果
39`检索至少有两名男同学选修的课程名
40`检索学生基本信息表S中不姓'王'的学生记录
41`检索和“李军”同性别并同班的学生的姓名
select 姓名from s
where 性别=(select 性别 from s
where 姓名='李军') and 系=(select from s
where 姓名='李军') and 姓名<>'李军'
42`统计被学生选修的课程门数
select count (distinct 课程号) from sc
//distinct 去掉重复记录
43`求选修C04课程的学生的平均年龄。
select
44`求刘老师所授课程的每门课程的学生平均成绩
select 课程号, avg(成绩) from sc
where 课程号=(select 课程号 from c
where 教师 like '刘%')
Group by 课程号
45`统计每门课程的学生选修人数(超过2人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列:
select 课程号, count(*)from sc
group by 课程号 //每个人 需要他
Having count(*)>2
order by count(*) desc, 课程号 asc //人数相同时 课程号按升序排列
46`查询“c01”课程比“c02”课程成绩高的所有学生学号
select a.学号 from
(select 学号,课程号,成绩
where 课程号='c01')as a,
(select 学号,课程号,成绩
where 课程号='c02')as b
where a.学号=b.学号 and
a.成绩 >b.成绩
47`查询平均成绩大于60分的同学的学号和平均成绩
48`查询所有同学的学号,姓名,选课数,总成绩
select 学号,姓名, count(*),max (成绩)
from sc inner join s ons.学号=sc.学号
group by 课程号
49`查询姓"李"的李老师的个数
50`查询没学过"叶平"老师课的同学的学号,姓名
select 学号,姓名 from s
where 学号 not in
(select 学号 from sc
where 课程号=
(select 课程号 from c
where 教师 ='应刻苦'))
51`查询学过"c01"并且也学过编号"c02"课程的同学的学号`姓名
select 学号,姓名 from s
where 学号 in
(select 学号 from sc
where 课程号='c01'and 学号 in
(select 学号 from sc
where 课程号='c02'))
第二种方法
select s.学号,姓名 from s,sc as a,sc as b
where a.学号 = b.学号 and a.课程号 ='001'and b.课程号= 'c02'
and s.学号
52`查询学过"叶平"老师所教的所有课的同学的学号`姓名
select 学号 from sc
where 课程号 in (select 课程号 from c
where 教师='叶平')
group by 学号
having count(*)=
(select count(*) from c
where 教师='叶平')
53`查询课程编号“c02”的成绩比课程编号"c01"课程低的所有同学的学号`姓名;
Select 学号,姓名 from s
where 学号 in
(select a.学号 from sc as a,sc as b
where a.学号=b.学号 and a.课程号=b.课程号 and a.成绩<b.成绩 and a.课程号 ='c01' and b.课程号='c02')
54`查询所有课程成绩小于 60 分的同学的学号`姓名;
Select 学号,姓名 from s
where 学号 in (Select 学号 from sc
Group by 学号
Having max (成绩)<60)
55`查询没有学全所有课的同学的学号`姓名
select 学号,姓名 from s
where 学号 not in (
Select 学号 from sc
Group by 学号 having count(*)=
(Select count(*) from c))
56`查询至少有一门课与学号为"j0401"的同学所学相同的同学的学号和姓名;
Select 学号,姓名 from s
where 学号 in
(select 学号 from sc
where 课程号 in
(select 课程号 from sc
where 学号='j0401')and 学号<>'j0401')
57`查询至少学过课程号为"c01"同学所学一门课的其他同学学号和姓名;
58`把"SC"表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;
59`查询和'j0401'号的同学学习的课程完全相同的其他同学学号和姓名;
Select 学号,姓名 from s
where 学号 in
(select 学号 from sc
where 课程号 in
(select 课程号 from sc
where 学号='j0401')and 学号<>'j0401')
group by 学号,姓名
having count(*)=(select count(*)from sc
where 学号='j0401')
60`删除学习"叶平"老师课的SC表记录
61`查询每门课程被选修的学生数
62`查询出只选修了一门课程的全部学生的学号和姓名
63`检索 至少两名男同学选修的课程名
select 课程名 from c where 课程号 in (select sc.课程号 from sc inner join s on s.学号=sc.学号 where s.性别='男' group by sc.课程号 having count(sc.课程号)>=2)
64`查询 ‘操作系统’课程得分最高的学生姓名 性别和所在系
select s.姓名,s.性别,s.系 from s inner join sc on s.学号=sc.学号
inner join c on sc.课程号=c.课程号 where c.课程名='操作系统'
and sc.成绩=(select max(sc.成绩) from sc inner join c on sc.课程号 = c.课程号 where c.课程名='操作系统')