SQL语句测试题附答案

本文详细介绍了SQL语句的执行顺序,并通过一系列实际问题展示了如何运用SQL进行复杂查询,包括成绩对比、分组聚合、条件筛选等操作。涉及子查询、连接、聚合函数、排序、过滤等技巧,适合SQL初学者和进阶者学习。
摘要由CSDN通过智能技术生成

SQL的执行顺序:

(1)from  (2)on  (3)join  (4) where 
(5)group by(开始使用select中的别名,后面的语句中都可以使用)   这里可以使用表中普通字段的别名,不能使用聚合函数的别名
(6) avg,sum.... (聚合函数)
(7)having 
(8) select 
(9) distinct 
(10) order by

Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表

 

问题:
1、查询001课程比002课程成绩高的所有学生的学号;
  select a.S# from (select s#,score from SC where C#='001') a,(select s#,score
 
from SC where C#='002') b
 
where a.score>b.score and a.s#=b.s#;
2、查询平均成绩大于60分的同学的学号和平均成绩;
    select S#,avg(score)
   
from sc
   
group by S# having avg(score) >60;
3、查询所有同学的学号、姓名、选课数、总成绩;
  select Student.S#,Student.Sname,count(SC.C#),sum(score)
 
from Student left Outer join SC on Student.S#=SC.S#
 
group by Student.S#,Sname
4、查询姓的老师的个数;
  select count(distinct(Tname))
 
from Teacher
 
where Tname like '%';
5、查询没学过叶平老师课的同学的学号、姓名;

Student.S#,Student.Sname
   
from Student 
   
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where  SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');
6、查询学过001并且也学过编号002课程的同学的学号、姓名;
  select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');
7、查询学过叶平老师所教的所有课的同学的学号、姓名;
  select S#,Sname
 
from Student
 
where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from

Course,Teacher  where Teacher.T#=Course.T# and Tname='叶平'));
8、查询课程编号002的成绩比课程编号001课程低的所有同学的学号、姓名;
  Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2
 
from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;
9、查询所有课程成绩小于60分的同学的学号、姓名;
  select S#,Sname
 
from Student
 
where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);
10、查询没有学全所有课的同学的学号、姓名;
    select Student.S#,Student.Sname
   
from Student,SC
   
where Student.S#=SC.S# group by  Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);
11、查询至少有一门课与学号为1001的同学所学相同的同学的学号和姓名;

select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';
12、查询至少学过学号为001同学所有一门课的其他同学学号和姓名;
    select distinct SC.S#,Sname
   
from Student,SC
   
where Student.S#=SC.S# and C# in (select C# from SC where S#='001');
13、把“SC”表中叶平老师教的课的成绩都更改为此课程的平均成绩;
    update SC set score=(select avg(SC_2.score)
   
from SC SC_2
   
where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值