SQL查询只选修了某一门课的学生

最近工作上遇到一个问题可简化成这个问题:查询只选修了某一门课程的学生,SQL怎么写?

先给出DDL

CREATE TABLE student_course_mapping (
	student_name VARCHAR(64),
	course_name VARCHAR(64)
);
-- John选了三门课
insert into public.student_course_mapping values ('John','Database');
insert into public.student_course_mapping values ('John','HTML');
insert into public.student_course_mapping values ('John','Javascript');
-- Jack选了两门课
insert into public.student_course_mapping values ('Jack','Database');
insert into public.student_course_mapping values ('Jack','HTML');
-- Leon只选了Database
insert into public.student_course_mapping values ('Leon','Database');
-- Raymond只选了HTML
insert into public.student_course_mapping values ('Raymond','HTML');

数据是这样

student_namecourse_name
JohnDatabase
JohnHTML
JohnJavascript
JackDatabase
JackHTML
LeonDatabase
RaymondHTML

要查找只选修了Database课程的学生,我的SQL是这样

select scm2.* from student_course_mapping scm2 
where scm2.course_name ='Database' 
and scm2.student_name in (
	select scm.student_name from student_course_mapping scm 
    group by scm.student_name 
    having count(scm.student_name) = 1 
)

运行结果是

Leon	Database

你们有没有更好的建议呢?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值