mysql复杂查询选择题_复杂查询优质习题

#1)查询选修了 Oracle 的学生姓名;

SELECT t1.`name`

FROM stu t1,course t2,score t3

WHERE t1.`id`=t3.`stu_id` AND t2.`id`=t3.`course_id`

AND t2.`name`='Oracle';

#2)查询 姜振国 同学选修了的课程名字;

SELECT t2.`name`

FROM stu t1,course t2,score t3

WHERE t1.`id`=t3.`stu_id` AND t2.`id`=t3.`course_id`

AND t1.`name`='姜振国';

#3)查询只选修了1门课程的学生学号和姓名;

#子句

SELECT stu_id,COUNT(id)

FROM score

GROUP BY stu_id HAVING COUNT(id)=1;

SELECT id,NAME

FROM stu t1,(SELECT stu_id,COUNT(id)

FROM score

GROUP BY stu_id HAVING COUNT(id)=1) t2

WHERE t1.`id`=t2.stu_id;

#4)查询选修了至少3门课程的学生信息;

SELECT stu_id,COUNT(id)

FROM score

GROUP BY stu_id HAVING COUNT(id)>=3;

SELECT t1.`id`,t1.`name`,t1.`sex`,t1.`bj_id`

FROM stu t1,(SELECT stu_id,COUNT(id)

FROM score

GROUP BY stu_id HAVING COUNT(id)>=3) t2

WHERE t1.`id`=t2.stu_id;

#5)查询选修了所有课程的学生;

SELECT COUNT(id) FROM course;

SELECT stu_id

FROM score

GROUP BY stu_id HAVING COUNT(course_id)=(SELECT COUNT(id) FROM course);

SELECT *

FROM stu

WHERE stu_id IN();

#6)查询选修课程的学生人数;

SELECT COUNT(DISTINCT stu_id) FROM score;

#7)查询所学课程至少有一门跟 姜振国 所学课程相同的学生信息。

SELECT t2.`course_id`

FROM stu t1,score t2

WHERE t1.`id`=t2.`stu_id` AND t1.`name`='姜振国';

SELECT t1.*

FROM stu t1,score t2

WHERE t1.`id`=t2.`stu_id` AND t2.`course_id`=ANY(?);

SELECT DISTINCT t1.*

FROM stu t1,score t2

WHERE t1.`id`=t2.`stu_id` AND t2.`course_id`=ANY(SELECT t2.`course_id`

FROM stu t1,score t2

WHERE t1.`id`=t2.`stu_id` AND t1.`name`='姜振国') AND t1.`name`<>'姜振国';

#8)查询两门及两门以上不及格同学的平均分(<90)

#子句 查询所有学生的id和不及格课程的数量(小余90)

SELECT stu_id,COUNT(id)

FROM score t1

WHERE t1.grade<90

GROUP BY stu_id;

#子句 查询所有学生的id和不及格课程的数量大于等于2的(小余90)

SELECT stu_id,COUNT(id),AVG(grade) temp

FROM score t1

WHERE t1.grade<90

GROUP BY stu_id HAVING COUNT(id)>=2;

SELECT t1.stu_id,t1.temp

FROM (SELECT stu_id,COUNT(id),AVG(grade) temp

FROM score t1

WHERE t1.grade<90

GROUP BY stu_id HAVING COUNT(id)>=2) t1;

#可以在关联学生姓名

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值