创建
1.学生表
Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
2.课程表
Course(CID,Cname,TID) --CID --课程编号,Cname 课程名称,TID 教师编号
3.教师表
Teacher(TID,Tname) --TID 教师编号,Tname 教师姓名
4.成绩表
SC(SID,CID,score) --SID 学生编号,CID 课程编号,score 分数
1.学生表
insert into Student values(‘01’ , ‘赵雷’ , ‘1990-01-01’ , ‘男’);
insert into Student values(‘02’ , ‘钱电’ , ‘1990-12-21’ , ‘男’);
insert into Student values(‘03’ , ‘孙风’ , ‘1990-05-20’ , ‘男’);
insert into Student values(‘04’ , ‘李云’ , ‘1990-08-06’ , ‘男’);
insert into Student values(‘05’ , ‘周梅’ , ‘1991-12-01’ , ‘女’);
insert into Student values(‘06’ , ‘吴兰’ , ‘1992-03-01’ , ‘女’);
insert into Student values(‘07’ , ‘郑竹’ , ‘1989-07-01’ , ‘女’);
insert into Student values(‘08’ , ‘王菊’ , ‘1990-01-20’ , ‘女’);
在这里插入图片描述

2.课程表
3.教师表
4.成绩表

简单的查询
1.查询"01"课程比"02"课程成绩高的学生的信息及课程分数–1.1、查询同时存在"01"课程和"02"课程的情况
select a.* , b.score 课程01的分数,c.score 课程02的分数 from Student a , SC b , SC c
where a.SID = b.SID and a.SID = c.SID and b.CID = ‘01’ and c.CID = ‘02’ and b.score > c.score

查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
select a.SID , a.Sname , cast(avg(b.score) as decimal(18,2)) avg_score
from Student a , sc b
where a.SID = b.SID
group by a.SID , a.Sname
having cast(avg(b.score) as decimal(18,2)) >= 60
order by a.SID

查询所有有成绩的SQL。
select a.SID 学生编号 , a.Sname 学生姓名 , count(b.CID) 选课总数, sum(score) 所有课程的总成绩
from Student a , SC b
where a.SID = b.SID
group by a.SID,a.Sname
order by a.SID

查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息
select Student.* from Student , SC where Student.SID = SC.SID and SC.CID = ‘01’ and not exists (Select 1 from SC SC_2 where SC_2.SID = SC.SID and SC_2.CID = ‘02’) order by Student.SID

查询没有学全所有课程的同学的信息
select Student.*
from Student , SC
where Student.SID = SC.SID
group by Student.SID , Student.Sname , Student.Sage , Student.Ssex having count(CID) < (select count(CID) from Course)

查询和"01"号的同学学习的课程完全相同的其他同学的信息
select Student.* from Student where SID in
(select distinct SC.SID from SC where SID <> ‘01’ and SC.CID in (select distinct CID from SC where SID = ‘01’)
group by SC.SID having count(1) = (select count(1) from SC where SID=‘01’))
select Student.* from Student where SID in
(select distinct SC.SID from SC where SID <> ‘01’ and SC.CID in (select distinct CID from SC where SID = ‘01’)
group by SC.SID having count(1) = (select count(1) from SC where SID=‘01’))











