SQL 基础题1 +查询选择了课程1的学生 +2:同时选择2门课的学生。

1:– 寻找选择了课程1的学生信息

– 1:查询出选择了课程1的学生信息,
– 条件是:课程id是1.可以得到student_id
select student_id from studentcourse
where course_id=1;
这里写图片描述

– 2:根据得到的student_id.来获取学生信息
– 条件是:学生id相同。要注意有多个学生对应student_id。用in
select student.* from student
where id in(select student_id from studentcourse
where course_id=1);
这里写图片描述
– 如果不添加id相同。
select student.* from student ,studentcourse
where course_id=1;
这里写图片描述
这个是因为
在第一步select id from student;里面有10个选择
这里写图片描述
然后在第二步 select student.* from student ,studentcourse
where course_id=1
其实是在执行
select student_id from studentcourse
where course_id=1;
这里写图片描述
最后一共得到了50个。就是说是把前面的student里面的10个取出来,然后再执行了后面选出来的5个满足的,变成了50个。

简单模式,因为第二步是获取id相同情形下的学生信息,所以我们可以同时从两个表里面一起查询。只要多加条件就好。
select student.* from student ,studentcourse
where student.id=studentcourse.student_id and course_id=1;

2: 查询出同时选择了课程1和课程2的学生信息

select student.* from student,studentcourse
where student.id=studentcourse.student_id and course_id=1
and exists
(select student.* from student,studentcourse
where student.id=studentcourse.student_id and course_id=2);

因为有主查询和子查询,所以第二步select student.* from student,studentcourse可以省略student更简洁点:
select student.* from student,studentcourse
where student.id=studentcourse.student_id and course_id=1
and exists
(select student.* from studentcourse
where student.id=studentcourse.student_id and course_id=2);

exists的区别在于。先从子查询中查询,如果子查询结果存在,就会显示出主查询中的所有数据。
select *
from student
where exists(select *from studentcourse
where course_id=1
and student.id = studentcourse.student_id
);
由于同时满足select *from studentcourse
where course_id=1
有5个。
在进行第一步的时候
会把第一个带进来,判断是否满足。以此进行,最后满足的是5个
这里写图片描述

第二个比第一个少了个条件
select *
from student
where course_id=1
);
这里写图片描述
由于没有了约束条件,就直接得到的是10个id相同的。
记住,这个是在student里面查询。上面的第一个题目里不加id是在两个里面查询
先开始查询select *
from student
有10行,
然后select *from studentcourse
where course_id=1
course_id=1 没有附加约束,就是个简单结果。所以
有结果,就把第一行显示出来,
然后再次开始查询select *
from student
有10行,
然后select *from studentcourse
where course_id=1
有结果,就把第二行显示出来,
因为在子查询中,id相同的有10个。所以把主查询select *
from student的信息全部都显示出来了。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 该项目是个人毕设项目源码,评分达到95分,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机、自动化等相关专业的学生或从业者下载使用,也可作为期末课程设计、课程大作业、毕业设计等。 具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现类似其他功能。 ## 技术框架: SSM(SpringMVC + Spring + Mybatis) ## 开发软件: Eclipse/Idea都可以 + JDK + Tomcat + mysql 开发一个在线学习平台,一共3个身份:管理员,老师和学生! 管理员功能:登录后可以添加学生信息,管理所有学生信息,添加单个老师信息,也可以批量导入很多老师信息,管理所有老师信息,添加和管理学院信息,发布课程信息,管理所有课程,查看回复话讨论信息,发布网站公告,管理网站公告信息! 教师功能:上传课程视频信息,查询管理所有教学视频,上课课程文档课件信息,查询管理所有课件文档,新增讨论话信息,查询编辑管理所有话信息,按照课程发布作业信息,可以向某次作业中加入目信息,也可以删除目信息,每个目带有分数值,老师可以修改个人信息。 学生功能:查询所有课程信息,在线课程视频信息查询,可以在线观看某个视频教学,查询和下载所有的课件文件,查看所有话讨论信息,可以回复话,也可以查看话的回复信息,可以查询网站公告信息,查询老师布置的作业,进入作业目列表做,提交可以查看完成作业的分数,可以修改个人信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值