1、查询男生和女生的个数:
select gender, sum(sid)
fromstudent
group by gender
2、查询平均成绩大于60分的同学的学号和平均成绩
select student_id, avg(num)
fromscore
group by student_id
having avg(num) > 60;
3、接上面同时显示学生名字
select B.student_id, student.sname, B.xxx
from(select student_id, avg(num) as xxxfromscoregroup by student_idhaving avg(num) > 60) as Bleft joinstudent ON B.student_id = student.sid;
-- avg(num)会被认为函数,不能做列名使用,加as xxx定义别名,()as B定义临时表
4、查询所有同学的学号、姓名、选课数、总成绩:
select score.student_id,student.sname,count(score.student_id),sum(score.num)
fromscoreleft joinstudent ON score.student_id = student.sid
group by score.student_id
5、查询姓“李”的老师的个数:
select count(tid)
fromteacher
wheretname like '李%'
6、查询没学过“李平”老师课的同学的学号、姓名
select *fromstudentwheresid not in (select student_idfromscorewherecourse_id in (SELECT cidFROMdb1.courseleft jointeacher ON course.teacher_id = teacher.tidwheretname = '李平老师'))
7、查询“生物”课程比“物理”课程成绩高的所有学生的学号
select A.student_id
from(select score.student_id, course.cname, score.numfromscoreleft join course ON score.course_id = course.cidwherecname = '生物') as Aleft join(select score.student_id, course.cname, score.numfromscoreleft join course ON score.course_id = course.cidwherecname = '物理') as B ON A.student_id = B.student_id
whereA.num > B.num
8、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名
select A.student_id, student.sname
from(select *fromscoreleft join course ON score.course_id = course.cidwherecourse.cid = 1 or course.cid = 2) as Aleft joinstudent ON A.student_id = student.sid
wherecourse_id > 1
9、查询和编号“2”号的同学学习的课程完全相同的其他同学学号和姓名
???
10、查询学过“李平”老师所教的所有课的同学的学号、姓名
???
11、查询所有课程成绩小于60分的同学的学号、姓名
select A.student_id, student.sname
from(select student_idfromscorewherenum < 60group by student_id) as A -- distinct 也可去重,效率低left joinstudent ON A.student_id = student.sid
12、查询没有学全所有课的同学的学号、姓名
13、
14、
15、
16、17、18、19、20、21、22、23、24、25、26、27、28、29、30、31、32、33、34、35、36、37