暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL脚本案例【5】查询至少有一门课程,与学号"01"的学生所学课程相同的学生ID、姓名

皮皮克克 2024-03-24
50

点击关注公众号,干货第一时间送达


再看一题。


一,需求场景

请查询表格中,至少有一门课程,与学号为"01"的学生所学课程相同的学生ID、姓名。


正确的结果是:


【温馨提示:建表语句及数据导入脚本,请翻看前面的文章:SQL 脚本案例【2】课程1比课程2成绩高的所有学生编号


二,解决方案

【演示工具:Mysql8 + Navicat for Mysql】


还是遵守:小->大 的筛选原则

(1)先筛选学号为 "01" 的学生所学的所有课程

  select c_id
  from score
  where s_id = '01'

结果集:

(2)再筛选没有学过这些课程的学生

注意:需要按照学生分组,因为每个学生所学课程可能多个,用每个学生所学的所有课程,去和 "01"学生所学课程比较筛选。

  select s_id
  from score
  where c_id in
  (
      select c_id
      from score
      where s_id = '01'
  )
  and s_id <> '01'
  group by s_id

结果集:

(3)最后,关联 student 表,展示学生姓名即可

select s_id, s_name
from student
where s_id in (
  select s_id
  from score
  where c_id in
  (
      select c_id
      from score
      where s_id = '01'
  )
  and s_id <> '01'
  group by s_id
)

结果集:


当然,有的小伙伴喜欢用 join,

也是可以的:

select t3.s_id, t3.s_name
from student t3
join (
 select s_id
 from score sc
 join 
 (
  select c_id
  from score
  where s_id = '01'
 ) t1
 on sc.c_id = t1.c_id
 and sc.s_id <> '01'
 group by sc.s_id
) t2
on t3.s_id = t2.s_id



结束语:
Ok,就是本篇文章的全部内容了。
如果各位有不懂的地方,欢迎发消息给小编,小编会进行详细地解答。
最后,请屏幕前的各位吴彦祖和刘亦菲们,动动你们的小手,给小编一个

文章转载自皮皮克克,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论