数据库查询_同时选修了两门课的学生姓名、学号

MySql数据库查询同时选修了两门课的学生姓名、学号

这个查询要用到含有学生姓名、学号的表和含有学生选课情况的表,我定义的含有学生姓名sname和学号sno的表是student表(sno学号,sname姓名,sdept专业,sage年龄,ssex性别)含有学生选课情况的表是sc表(sno学号,cno选修课程号,grade成绩),。
假设查询选修课程为2和3的学生姓名和学号,方法如下:
集合查询
where语句下的and不能用于连接两个相同属性的查询,如该题不能写为where cno=‘002’ and cno=‘003’ 。所以首先要从sc表查询选修课程为2号(或者3号)的学生学号,然后用and连接查询课程号为2号(或3号)的课程:

 WHERE sc.sno IN
              ( SELECT sno FROM sc 
              	 WHERE cno='002'
                 AND sno IN             // ---+
              	   ( SELECT sno FROM sc //    |查询选课课号为3的学生学号
                     WHERE cno='003'    // ---+
                   )
               )

以上为在sc表中查询出选修课程为2号和3号的学生学号,然后,我们要将查询出来的学号集合和student表结合,在student表中找出和以上查询出的学生学号相同的学生,最后输出其学号和姓名。
因此,总的查询语句为:

SELECT student.sno,sname FROM student,sc 
  WHERE sc.sno IN
                  ( SELECT sno FROM sc 
                  	 WHERE cno='002'
                  	AND sno IN             //  ---+
                  	   ( SELECT sno FROM sc//     |查询选课课号为3的学生学号
                         WHERE cno='003'   //  ---+
                       )
                   )AND student.sno=sc.sno
                   group by student.sno;

因为两个表中都有学号sno属性,所以要表明所要查询的学号出自哪个表,最后按学号分组,以免重复出现同一名学生的信息。
输出结果如图所示:

+-------+-------+
| sno   | sname |
+-------+-------+
| 08001 | 张力  |
| 08002 | 李丽  |
| 08003 | 赵海  |
+-------+-------+
3 rows in set
  • 37
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值