实验三MySQL单表及多表查询

tb_student(sid,sname,sage,ssex) 学生表       

sid:学号;sname:学生姓名;sage:学生年龄;ssex:学生性别

tb_course(cid,cname,tid) 课程表                    

cid,课程编号;cname:课程名字;tid:教师编号

tb_sc(sid,cid,score) 成绩表                             

sid:学号;cid,课程编号;score:成绩

tb_teacher(tid,tname) 教师表                        

tid:教师编号; tname:教师名字

tb_student:学生表

sid

学号

sname

姓名

sage

年龄

ssex

性别

tb_course:课程表

cid

课程编号

cname

课程名

tid

教师编号

tc_sc:成绩表

sid

学号

cid

课程编号

score

成绩

tb_teacher:教师表

tid

教师编号

tname

教师名字

问题:

1、删除002”同学的“001”课程的成绩

DELETE cid='001' FROM tc_sc WHERE sid='002';

2、检索004”课程分数小于60,按分数降序排列的同学学号

SELECT sid='004' FROM tc_sc WHERE score<60 ORDER BY sid DESC;

3、查询两门以上不及格课程的同学的学号及其平均成绩

SELECT sid,AVG(score) FROM tc_sc WHERE sid in

(SELECT sid FROM tc_sc WHERE score<60 GROUP BY sid HAVING COUNT(sid>=2));

4、查询没学过“张三”老师讲授的任一门课程的学生姓名

SELECT * FROM tb_student s WHERE sid NOT IN(

SELECT DISTINCT sid FROM tc_sc sc

INNER JOIN tb_course c ON sc.cid =c.cid

INNER JOIN tb_teacher t ON c.tid =t.tid

WHERE t.tname ='张三')

5、检索至少选修两门课程的学生学号

SELECT sid FROM tc_sc GROUP BY sid HAVING COUNT(cid)>=2

6、统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

SELECT DISTINCT cid,COUNT(sid) FROM tc_sc GROUP BY cid

HAVING COUNT(sid)>10 ORDER BY cid DESC,2 ASC

7、查询每门功成绩最好的前两名

SELECT s.sid,sname,temp.cid,temp.score FROM tb_student s INNER JOIN

(SELECT tb1.* FROM tc_sc tb1 LEFT JOIN tc_sc tb2 ON tb1.cid =tb2.cid

AND tb1.score =tb2.score

GROUP BY tb1.sid,tb1.cid,tb1.score HAVING COUNT(*)<2

)

temp ON s.sid=temp.sid ORDER BY temp.cid,temp.score DESC

8、查询不同课程成绩相同的学生的学号、课程号、学生成绩

SELECT a.* FROM tc_sc a LEFT JOIN tc_sc b

 ON a.cid!=b.cid WHERE a.score=b.score;

9、查询各个课程及相应的选修人数

SELECT cid,COUNT(sid) FROM tc_sc GROUP BY cid ORDER BY cid DESC;

10、查询选修“张三”老师所授课程的学生中,成绩最高的学生姓名及其成绩

SELECT s.sid,c.cid,sname,score FROM tb_student s,tc_sc tc,tb_course c,tb_teacher t

WHERE s.sid =tc.sid AND tc.cid =c.cid AND c.tid =t.tid

AND t.tname ='张三'

AND score =(SELECT MAX(score) FROM tc_sc WHERE cid=c.cid);

11、求选了课程的学生人数

SELECT DISTINCT cid,COUNT(sid) FROM tc_sc  GROUP BY cid HAVING cid is NOT NULL;

12、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;

SELECT tc_sc.sid,sname FROM tc_sc,tb_student WHERE tc_sc.cid='003' AND score>80 AND tc_sc.sid=tb_student.sid;

13、查询不及格的课程,并按课程号从大到小排列

SELECT cid,score FROM tc_sc HAVING score<60 ORDER BY cid DESC;

14、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;

SELECT tb_student.sname,cid,score FROM tb_student,tc_sc WHERE score>70 AND tb_student.sid =tc_sc.sid

15、查询所有学生的选课情况;

SELECT tb_student.sid,tb_student.sname,tb_student.sage,tb_student.ssex,tb_course.cname,tc_sc.score

FROM tb_student,tc_sc,tb_course WHERE tb_student.sid =tc_sc.sid AND tb_course.cid=tc_sc.cid

16、查询课程名称为“数据库”,且分数低于60的学生姓名和分数;

SELECT sname,score FROM tb_student,tb_course,tc_sc WHERE tb_course.cid=tc_sc.cid

 AND tb_student.sid=tc_sc.sid AND tb_course.cname ='数据库' AND score<60 GROUP BY sname

17、查询平均成绩大于85的所有学生的学号、姓名和平均成绩;

SELECT tb_student.sid,sname,AVG(score) FROM tb_student,tc_sc WHERE tb_student.sid=tc_sc.sid

GROUP BY tb_student.sid  HAVING  AVG(score)>85 ORDER BY tb_student.sid ASC

18、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列;

SELECT DISTINCT cid,AVG(score) FROM tc_sc GROUP BY cid ORDER BY AVG(score) ASC,2 DESC

19、1981年出生的学生名单(注:tb_student表中Sage列的类型是datetime);

SELECT * FROM tb_student WHERE sage LIKE '1981%' GROUP BY sid

20、查询同名同性学生名单,并统计同名人数;

SELECT a.*,COUNT(a.sid) FROM tb_student a LEFT JOIN tb_student b

ON a.sname= b.sname WHERE a.sid!=b.sid

21、查询姓“张”的学生名单;

SELECT * FROM tb_student WHERE sname LIKE '%'

22、查询男生、女生人数;

SELECT ssex,COUNT(ssex) FROM tb_student GROUP BY ssex

23、查询出只选修了一门课程的全部学生的学号和姓名;

SELECT tb_student.sid,sname FROM tb_course,tb_student,tc_sc where tb_course.cid=tc_sc.cid AND

tc_sc.sid=tb_student.sid  GROUP BY tb_student.sid HAVING COUNT(tb_student.sid)=1

24、查询每门课程被选修的学生数;

SELECT cid,COUNT(sid) FROM tc_sc GROUP BY cid

25、查询各科成绩前三名的记录:(不考虑成绩并列情况);

select a.* from tc_sc a where

(select COUNT(*)from tc_sc b where b.score>a.score)<3  

26、查询不同老师所教不同课程平均分从高到低显示;

SELECT tc_sc.cid,cname,count(tc_sc.cid),score FROM tc_sc,tb_course

WHERE tc_sc.cid=tb_course.cid GROUP BY tc_sc.cid

27、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分;

SELECT s.sid,sname,(SELECT score FROM tc_sc sc1

WHERE sc1.sid =s.sid AND sc1.cid =(SELECT cid FROM tb_course WHERE cname ='数据库'))数据库,

(SELECT score FROM tc_sc sc2

WHERE sc2.sid =s.sid AND sc2.cid =(SELECT cid FROM tb_course WHERE cname ='企业管理'))企业管理,

(SELECT score FROM tc_sc sc3

WHERE sc3.sid =s.sid AND sc3.cid =(SELECT cid FROM tb_course WHERE cname ='英语'))英语,

COUNT(*) 课程数,AVG(sc.score) 平均分

FROM tb_student s,tc_sc sc

WHERE s.sid =sc.sid

GROUP BY s.sid;

28、查询和1002”号的同学学习的课程完全相同的其他同学学号和姓名;

SELECT sc.sid FROM tc_sc sc,tb_student s

WHERE sc.sid =s.sid AND sc.cid IN(SELECT cid FROM tc_sc WHERE sid =’1002’)

AND sc.cid<>2

GROUP BY sid HAVING COUNT(*) =(SELECT COUNT(*) FROM tc_sc WHERE sid =’1002’);

29、SC”表中“张三”老师教的课的成绩都更改为此课程的平均成绩;

update tc_sc set score=(select avg(score)

from tc_sc,tb_course,tb_teacher where

tb_course.cid=tc_sc.cid and tb_course.tid=tb_teacher.tid

and tb_teacher.tname='张三') GROUP BY sid;

30、查询至少学过学号为001”同学所有一门课的其他同学学号和姓名;

SELECT tc_sc.sid,sname FROM tc_sc,tb_student WHERE

tc_sc.sid=tb_student.sid AND

 cid IN(SELECT cid FROM tc_sc WHERE sid ='001')

31、查询至少有一门课与学号为1001”的同学所学相同的同学的学号和姓名;

SELECT tc_sc.sid,sname FROM tc_sc,tb_student WHERE

tc_sc.sid=tb_student.sid AND

 cid IN(SELECT cid FROM tc_sc WHERE sid ='1001')

32、查询没有学全所有课的同学的学号、姓名;

SELECT tc_sc.sid,sname FROM tc_sc,tb_student

WHERE tc_sc.sid=tb_student.sid GROUP BY tc_sc.sid HAVING

 COUNT(tc_sc.cid)<(SELECT COUNT(cid) FROM tc_sc)

33、查询所有课程成绩小于60分的同学的学号、姓名;

SELECT tc_sc.sid,sname FROM tc_sc,tb_student WHERE

tc_sc.sid = tb_student.sid AND score<60

34、查询学过“张三”老师所教的所有课的同学的学号、姓名;

SELECT tc_sc.sid,sname FROM tb_course,tc_sc,tb_student,tb_teacher WHERE tb_course.cid =tc_sc.cid AND

tc_sc.sid =tb_student.sid AND tb_teacher.tid =tb_course.tid AND tb_teacher.tname='张三'

35、查询所有同学的学号、姓名、选课数、总成绩;

SELECT tc_sc.sid,sname,COUNT(tc_sc.cid),COUNT(score) FROM tc_sc,tb_student,tb_course

WHERE tc_sc.sid =tb_student.sid AND tc_sc.cid =tb_course.cid GROUP BY tc_sc.sid

猜你喜欢

转载自blog.csdn.net/masterpieve/article/details/80227938