数据库练习题二

2025-10-01 07:48:17

1、表名和字段

–1.学生表

Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别

–2.课程表

Course(c_id,c_name,t_id) – –课程编号, 课程名称, 教师编号

–3.教师表

Teacher(t_id,t_name) –教师编号,教师姓名

–4.成绩表

Score(s_id,c_id,s_score) –学生编号,课程编号,分数

2、5、查询"01"课程比"02"课程成绩高的学生的信息及课程分数

select Student.*  ,b.s_score'课程01的分数',c.s_score'课程02的分数'

from   Student  ,Score b ,Score c 

where  b.s_score>c.s_score and  c.c_id='02' and b.c_id='01' 

and   Student.s_id=b.s_id and  Student.s_id=c.s_id

数据库练习题二

3、6、查询"01"课程比"02"课程成绩低的学生的信息及课程分数

select Student.*  ,b.s_score'课程01的分数',c.s_score'课程02的分数'

from   Student  ,Score b ,Score c 

where  b.s_score<c.s_score and  c.c_id='02' and b.c_id='01' 

and   Student.s_id=b.s_id and  Student.s_id=c.s_id

数据库练习题二

4、7、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

select  Student.s_id,Student.s_name,avg(s_score) as '平均分'

from Student left join score on Student.s_id=Score.s_id

group by Student.s_id,Student.s_name  having  avg(s_score)>=60

数据库练习题二

5、注意事项 :

1、where 后不能跟聚合函数,因为where执行顺序大于聚合函数。

2、where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

3、having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

6、8、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩

        -- (包括有成绩的和无成绩的)

select  Student.s_id,Student.s_name,avg(s_score) as '平均分'

from Student left join score on Student.s_id=Score.s_id

group by Student.s_id,Student.s_name  having  avg(s_score)<=60

 union

 select  Student.s_id,Student.s_name,avg(s_score) as '平均分'

from Student left join score on Student.s_id=Score.s_id

group by Student.s_id,Student.s_name  having   avg(s_score) is null

数据库练习题二

7、9、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩

select  Student.s_id,Student.s_name,count(Course.c_id) as '选课总数',sum(Score.s_score) as '所有课程总成绩'

from Student left join Score on Student.s_id=Score.s_id  left join  Course on course.c_id=Score.c_id

group by   Student.s_id,Student.s_name

数据库练习题二

8、10、查询没学过"张三"老师授课的同学的信息

select  *

from  students

where  Student.s_id not in(

select distinct Student.s_id

from  student left join Score on Student.s_id=Score.s_id   left join  Course  on Score.c_id=Course.c_id  left join Teacher on Course.t_id=Teacher.t_id

where  Teacher.t_name='张三'

)

数据库练习题二

9、11、查询学过编号为"01"并且也学过编号为"02 "的课程的同学的信息

select  student.*

from student,score sc,score sc1

where sc.s_id=sc1.s_id and  student.s_id=sc.s_id and  sc.c_id='01'  and sc1.c_id='02'

因为我操作的时候是基于sql2012和plsql  所以截图就有两种

数据库练习题二

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢