老手帮我看看,这句SQL语句啥意思,拆分帮忙解释一下。就是根据既有A又有B的字段查东西

m0_37775529 2017-06-30 04:33:53



一张成绩表 就是想查找既考了计算机,也考了英语的学生ID;自己写的是SELECT stu_id FROM score WHERE stu_id IN (SELECT s.stu_id FROM score s WHERE s.c_name='计算机')AND c_name='英语';
在网上查了一下,有这个语句 “ select stu_id from score where c_name in ('计算机','英语') group by stu_id having count(distinct c_name)=2 ”
也可以达到相同的效果,但是看不懂。哪位高手帮解释一下
...全文
303 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
MikeDDT009 2017-06-30
  • 打赏
  • 举报
回复
select stu_id from score where c_name in ('计算机','英语') group by stu_id having count(distinct c_name)=2 拆分如下: 1.先看最终表格的列select stu_id from score  这里查询了score表的select stu_id 也就是显示出来的虚拟表只有一列,但是其实是查询了整个表,看成select * from score 这样查询了全部 2.where c_name in ('计算机','英语')  然后基于前面查询的所有内容里面二次筛选出里面考试科目再计算机或者英语的行,相对于第一步查询的全部就只显示符合条件的了 3. group by stu_id  在二次筛选(已经获得了参加了英语和计算机的所有人员信息)出来的表中再次进行新的操作,分组(这里使用学号分组,因为是主键,所以可以剔除重复的人,毕竟可能有人既参加了英语也参加了计算机,这样的话就在第二部查出来的表里面有同一个人但是却占了两行数据) 4.count(distinct c_name)=2 接着就是对第三部操作后的结果再次进行操作。也就是分组以后再统计没个分组里面的行数等于2的分组。这样就查找出了需要的表了 5.对查出全部信息的表格再进行约束只显示stu_id 这个列 以上就是个人分析

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧