需要用的表的信息如下:
1.学生表:student(编号sid,姓名sname,年龄sage,性别ssex)
2.课程表:course(课程编号cid,课程名称cname,教师编号tid)
3.成绩表:sc(学生编号sid,课程编号cid,成绩score)
4.教师表:teacher(教师编号tid,姓名tname)
student表
create table Student(SId varchar(10),Sname varchar(10),Sage varchar(10),Ssex varchar(10));
insert into Student values('1001' , '张三' , '19' , '男');
insert into Student values('1002' , '李四' , '20' , '女');
insert into Student values('1003' , '王五' , '21' , '男');
insert into Student values('1004' , '马六' , '19' , '女');
insert into Student values('1005' , '孙七' , '22' , '女');
insert into Student values('1006' , '钱八' , '18' , '男');
insert into Student values('1007' , '赵九' , '23' , '女');
insert into Student values('1008' , '罗晶晶' , '21' , '女');
course表
create table Course(CId varchar(10),Cname varchar(10),TId varchar(10));
insert into Course values('001' , 'PHP' , '1');
insert into Course values('002' , 'C#' , '1');
insert into Course values('003' , 'C++' , '2');
insert into Course values('004' , 'JAVA' , '3');
insert into Course values('005' , 'Python' , '4');
insert into Course values('006' , 'R' , '5');
insert into Course values('007' , 'HTML' , '6');
teacher表
create table Teacher(TId varchar(10),Tname varchar(10));
insert into Teacher values('1' , '叶平');
insert into Teacher values('2' , '李浩然');
insert into Teacher values('3' , '胡平原');
insert into Teacher values('4' , '朱清时');
insert into Teacher values('5' , '赛先生');
insert into Teacher values('6' , '宋三东');
sc表
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
insert into SC values('1001' , '001' , 89);
insert into SC values('1002' , '001' , 80);
insert into SC values('1003' , '001' , 30);
insert into SC values('1004' , '001' , 78);
insert into SC values('1005' , '001' , 68);
insert into SC values('1006' , '001' , 93);
insert into SC values('1007' , '001' , 62);
insert into SC values('1001' , '002' , 67);
insert into SC values('1002' , '002' , 86);
insert into SC values('1003' , '002' , 67);
insert into SC values('1004' , '002' , 77);
insert into SC values('1005' , '002' , 66);
insert into SC values('1006' , '002' , 84);
insert into SC values('1007' , '002' , 72);
insert into SC values('1001' , '003' , 82);
insert into SC values('1002' , '003' , 85);
insert into SC values('1003' , '003' , 32);
insert into SC values('1004' , '003' , 73);
insert into SC values('1005' , '003' , 64);
insert into SC values('1006' , '003' , 87);
insert into SC values('1007' , '003' , 77);
insert into SC values('1008' , '003' , 94);
insert into SC values('1001' , '004' , 39);
insert into SC values('1002' , '004' , 80);
insert into SC values('1003' , '004' , 80);
insert into SC values('1004' , '004' , 88);
insert into SC values('1005' , '004' , 68);
insert into SC values('1006' , '004' , 59);
insert into SC values('1007' , '004' , 42);
insert into SC values('1008' , '004' , 64);
insert into SC values('1001' , '005' , 89);
insert into SC values('1002' , '005' , 70);
insert into SC values('1003' , '005' , 60);
insert into SC values('1004' , '005' , 58);
insert into SC values('1005' , '005' , 38);
insert into SC values('1006' , '005' , 89);
insert into SC values('1007' , '005' , 72);
insert into SC values('1008' , '005' , 64);
insert into SC values('1001' , '006' , 49);
insert into SC values('1002' , '006' , 90);
insert into SC values('1003' , '006' , 70);
insert into SC values('1004' , '006' , 48);
insert into SC values('1005' , '006' , 98);
insert into SC values('1006' , '006' , 59);
insert into SC values('1007' , '006' , 72);
insert into SC values('1008' , '006' , 74);
insert into SC values('1001' , '007' , 100);
insert into SC values('1002' , '007' , 99);
insert into SC values('1003' , '007' , 89);
insert into SC values('1004' , '007' , 88);
insert into SC values('1005' , '007' , 78);
insert into SC values('1006' , '007' , 99);
insert into SC values('1007' , '007' , 82);
select a.sid from
(select sid,score from SC where cid='001') a,
(select sid,score from SC where cid='002') b
where a.score>b.score and a.sid=b.sid;
select sid ,avg(score) from sc
group by sid having avg(score)>60;
select student.sid,student.sname,count(sc.cid),sum(score)
from student left outer join sc on student.sid=sc.sid
group by student.sid,sname;
#需要去重
select count(distinct(tname))
from teacher where tname like '李%';
select student.sid,student.sname
from student
where sid not in (select distinct(sc.sid) from sc,course,teacher
where sc.cid=course.cid and
teacher.tid=course.tid and
teacher.tname='叶平');
select student.sid,student.sname
from student,sc
where student.sid=sc.sid
and sc.cid='001'
and exists (select * from sc as sc2 where sc2.sid=sc.sid
and sc2.cid='002');
select sid,sname from student
where sid in (select sid from sc,course,teacher where sc.cid=course.cid
and teacher.tid=course.tid and teacher.tname='叶平'
group by sid having count(sc.cid)=
(select count(cid) from course,teacher
where teacher.tid=course.tid and tname='叶平'));
select sid,sname
from (select student.sid,student.sname,score,
(select score from sc sc2
where sc2.sid=student.sid
and sc2.cid='002') score2
from student,sc
where student.sid=sc.sid and cid='001') sc3
where score2<score;
select sid,sname from student
where sid not in
(select student.sid from student,sc
where student.sid=sc.sid and score>60);
select student.sid,student.sname
from student,sc
where student.sid=sc.sid
group by student.sid,student.sname having count(cid)<(select count(cid)from course);
#写法一
select sid,sname from student
where sid in
(select distinct sid from sc where cid in (select cid from sc where sid='1001'));
#写法二
select distinct st.sid,sname from student st
inner join sc on st.sid=sc.sid
where sc.cid in (select cid from sc where sid='1001');
select distinct sc.sid,sname
from student, sc
where student.sid= sc.sid
and cid in (select cid from sc where sid='1001');
update sc set score=(select avg( sc_2.score)
from sc sc_2
where sc_2.cid= sc.cid )
from course,teacher
where course.cid= sc.cid
and course.tid=teacher.tid
and teacher.tname='叶平');
select sid from sc where cid in
(select cid from sc where sid='1002')
group by sid having count(*)=
(select count(*) from sc where sid='1002');
delete sc
from course,teacher,sc
where course.cid= sc.cid
and course.tid= teacher.tid
and tname='叶平';
insert sc select sid,'002',
(select avg(score)from sc where cid='002')
from student where sid not in
(select sid from sc where cid='002');
select sid as 学生id
,(select score from sc where sc.sid=t.sid and cid='004') as 数据库
,(select score from sc where sc.sid=t.sid and cid='001') as 企业管理
,(select score from sc where sc.sid=t.sid and cid='006') as 英语
,count(*) as 有效课程数, avg(t.score) as 平均成绩
from sc as t
group by sid
order by avg(t.score) ;
select l.cid as 课程id,l.score as 最高分,r.score as 最低分
from sc l , sc as r
where l.cid = r.cid and
l. score = (select max(il.score)
from sc as il,student as im
where l.cid = il.cid and im. sid=il.sid
group by il.cid)
and r. score = (select min(ir.score)
from sc as ir
where r.cid = ir.cid
group by ir.cid );
select t.cid as 课程号,
max(course.cname)as 课程名,
isnull(avg(score),0) as 平均成绩,
100 * sum(case when isnull(score,0)>=60 then 1 else 0
end)/count(*) as 及格百分数
from sc teac,course
where t.cid=course.cid
group by t.cid
order by 100 * sum(case when isnull(score,0)>=60 then 1
else 0 end)/count(*) desc;
select sum(case when cid ='001' then score else 0 end)/sum(case cid when '001' then 1 else 0 end) as 企业管理平均分
,100 * sum(case when cid ='001' and score >= 60 then 1 else 0 end)/sum(case when cid ='001' then 1 else 0 end) as 企业管理及格百分数
,sum(case when cid ='002' then score else 0 end)/sum(case cid when '002' then 1 else 0 end) as 马克思平均分
,100 * sum(case when cid ='002' and score >= 60 then 1 else 0 end)/sum(case when cid ='002' then 1 else 0 end) as 马克思及格百分数
,sum(case when cid ='003' then score else 0 end)/sum(case cid when '003' then 1 else 0 end) as uml平均分
,100 * sum(case when cid ='003' and score >= 60 then 1 else 0 end)/sum(case when cid ='003' then 1 else 0 end) as uml及格百分数
,sum(case when cid ='004' then score else 0 end)/sum(case cid when '004' then 1 else 0 end) as 数据库平均分
,100 * sum(case when cid ='004' and score >= 60 then 1 else 0 end)/sum(case when cid ='004' then 1 else 0 end) as 数据库及格百分数
from sc;
select max(z.tid) as 教师id,
max(z.tname) as 教师姓名,c.cid as 课程id,
max(c.cname) as 课程名称,
avg(score) as 平均成绩
from sc as t,course as c ,teacher as z
where t.cid=c.cid and c.tid=z.tid
group by c.cid
order by avg(score) desc;
select distinct top 3
sc.sid as 学生学号,
student.sname as 学生姓名 ,
t1.score as 企业管理,
t2.score as 马克思,
t3.score as uml,
t4.score as 数据库,
isnull(t1.score,0) + isnull(t2. score,0) + isnull(t3. score,0) + isnull(t4.score,0) as 总分
from student, sc left join sc as t1
on sc.sid = t1.sid and t1.cid = '001'
left join sc as t2
on sc.sid = t2.sid and t2.cid = '002'
left join sc as t3
on sc.sid = t3.sid and t3.cid = '003'
left join sc as t4
on sc.sid = t4.sid and t4.cid = '004'
where student. sid= sc.sid and
isnull(t1.score,0) + isnull(t2.score,0) + isnull(t3.score,0) + isnull(t4.score,0)
not in
(select distinct
top 15 with ties
isnull(t1.score,0) + isnull(t2.score,0) + isnull(t3.score,0) + isnull(t4.score,0)
from sc
left join sc as t1
on sc.sid = t1.sid and t1.cid = 'k1'
left join sc as t2
on sc.sid = t2.sid and t2.cid = 'k2'
left join sc as t3
on sc.sid = t3.sid and t3.cid = 'k3'
left join sc as t4
on sc.sid = t4.sid and t4.cid = 'k4'
order by isnull(t1.score,0) + isnull(t2.score,0) + isnull(t3.score,0) + isnull(t4.score,0) desc);
select sc.cid as 课程id, cname as 课程名称
,sum(case when score between 85 and 100 then 1 else 0 end) as [100 - 85]
,sum(case when score between 70 and 85 then 1 else 0 end) as [85 - 70]
,sum(case when score between 60 and 70 then 1 else 0 end) as [70 - 60]
,sum(case when score < 60 then 1 else 0 end) as [60 -]
from sc,course
where sc.cid=course.cid
group by sc.cid,cname;
select 1+(select count(distinct 平均成绩)
from (select sid,avg(score) as 平均成绩
from sc
group by sid) as t1
where 平均成绩>t2.平均成绩) as 名次,
sid as 学生学号,平均成绩
from (select sid,avg(score) 平均成绩
from sc
group by sid) as t2
order by 平均成绩 desc;
select t1.sid as 学生id,t1.cid as 课程id, score as 分数
from sc t1
where score in (select top 3 score
from sc
where t1.cid= cid
order by score de sc)
order by t1.cid;
select cid,count(sid) from sc group by cid;
select sc.sid,student.sname,count(cid) as 选课数
from sc,student
where sc.sid=student.sid
group by sc.sid,student.sname having count(cid)=1;
select count(ssex) as 男生人数
from student
group by ssex having ssex='男';
select count(ssex) as 女生人数
from student
group by ssex having ssex='女';
select sname from student where sname like '张%';
select sname,count(*)
from student
group by sname having count(*)>1;
select sname,convert(char (11),datepart(year,sage)) as age
from student
where convert(char(11),datepart(year,sage))='1981';
select cid,avg(score)
from sc
group by cid order by avg(score),cid desc ;
select sname,sc.sid,avg(score)
from student,sc
where student.sid= sc.sid
group by sc.sid,sname having avg(score)>85;
select sname,isnull(score,0)
from student,sc,course
where sc.sid=student.sid
and sc.cid=course.cid
and course.cname='数据库'
and score<60;
select sc.sid, sc.cid,sname,cname
from sc,student,course
where sc.sid=student.sid
and sc.cid=course.cid ;
select distinct student.sid,student.sname,sc.cid, sc.score
from student, sc
where sc.score>=70
and sc.sid=student.sid;
select cid from sc where score<60 order by cid ;
select sc.sid,student.sname
from sc,student
where sc.sid=student.sid
and score>80
and cid='003';
select count(*) from sc;
select student.sname,score
from student, sc,course c,teacher
where student.sid= sc.sid
and sc.cid=c.cid and c.tid=teacher.tid
and teacher.tname='叶平'
and sc.score=(select max(score)from sc where cid=c.cid );
select count(*) from sc group by cid;
select distinct a.sid,b.score
from sc a,sc b
where a.score=b. score and a.cid <>b.cid ;
select t1.sid as 学生id,t1.cid as 课程id, score as 分数
from sc t1
where score in (select top 2 score
from sc
where t1.cid= cid
order by score desc)
order by t1.cid;
select cid as 课程号,count(*) as 人数
from sc
group by cid
order by count(*) desc,cid;
select sid
from sc
group by sid having count(*)>= 2;
select cid,cname
from course
where cid in (select cid from sc group by cid);
select sname from student
where sid not in
(select sid from course,teacher,sc
where course.tid=teacher.tid
and sc.cid=course.cid and tname='叶平');
select sid,avg(isnull(score,0)) from sc
where sid in
(select sid from sc
where score <60
group by sid having count(*)>2)
group by sid;
select sid from sc where cid='004'
and score <60 order by score de sc;
delete from sc where sid='002'and cid='001';