查出来既学了课程号1又学了课程号2的学生学号

老师课上留的思考题,觉得挺有意思的,因为总不可能傻到写出Cno=1 and Cno=2这种傻子代码嘛,想了一下写了下面的代码:

大概的表结构如上图所示,目测就是要找到21号这个学生。

解决方式:

select a.Sno from sc as  a ,sc as b
where a.Sno=b.Sno and a.cno=1 and b.cno=2

思路:直接给这一个表取两个名字,按两个表查,一个查课程号1,另一个查课程号2,Sno相等的学生就是所求。
然后啊,我去csdn上搜了一下,也有很多人写这道题的题解,最多的就是嵌套,先查一部分,再查一部分,像这样:

  1. 很显然,我这个简单多了(从学生表查姓名这种事下文就不提了,我们只关注查学号这件事),但是哦,我猛地一想,不对劲呀,为什么没人想到我这个呢,极度不自信的我接着搜,根据我搜出来的结果,应该是效率太低。效率低主要体现在查找域过大。之前看到过说from和join的区别的文章,如果表中有5条数据,from这个表两次,这样搞出来就是从5*5=25个数据中查的(两张表一起查就是一个笛卡尔集的形式)。如果换成join,以此题为例两个相同的表就是5+5=10条数据(inner,left,right都是一样的,毕竟两张表都一模一样)。
    而别人那种嵌套的写法第一次从5个人中查cno=3的人,第二次从中查cno=2的人,其实吧,效率也就那样(毕竟查询了两次),写着还麻烦,因此我绝对是很聪明的那个人,只要改成join就好了 -_-嘻嘻。

  2. 然后回想到一个知识点,关于group by 的。真的好久没用过了,看到上图那个人的代码用了,看了一下,应该是起到去重的作用,以免重复出现同一名学生的信息。害,为啥我想到去重是用DISTINCT呢。好烦,我感觉group by好没用啊,所以我又去搜了一下,groupBy和distinct区别,好叭,group by全面碾压distinct,甚至还有文章告诉我distinct是性价比最低的开销最大的函数,好叭,是我low了。我去代码实践了一下,发现如果distinct只能写在开头字段上(比如id 和name 只能写在id前面,写在name前面就会报错),这样写的意思是id和name同时重复才会被查重,如果 有个性化的需求,比如只想对name去重,id可以重复,那就乖乖的用group by就好了。

总结1和2可得:
1:能用join就用join,最好别出现笛卡尔积的状况。
2.去重能用group by就用group by,distinct太low了,不过group by的主要用途还是统计分组上

所以这道题最后简单又高效的查询语句就是join联自己查啦(我觉得去重没必要,不可能会查出来重复数据呀):

select a.Sno from sc as  a
INNER JOIN sc as b ON a.Sno=b.Sno
where a.cno=1 and b.cno=2

数据库题:查出来既学了课程号1又学了课程号2的学生学号相关推荐

  1. 5. 数据库题(以个人熟悉数据库为准、按要求写出sql) (1) 计算每个人的总成绩并排名(要求显示字段:学号,姓名,总成绩) (2) 计算每个人单科的最高成绩(要求显示字段: 学号,姓名,课程,最

    5. 数据库题(以个人熟悉数据库为准.按要求写出sql) (1) 计算每个人的总成绩并排名(要求显示字段:学号,姓名,总成绩) (2) 计算每个人单科的最高成绩(要求显示字段: 学号,姓名,课程,最高 ...

  2. 武汉工程大学信息与计算科学专业面向对象程序设计课程设计题

    课程设计内容(从以下任务中任选一个) 1  售票处的服务系统 设计民航售票处的计算机系统可以为客户提供以下各项服务: (1)查询航线:根据旅客提出的终点站名输出以下信息:航班号.飞机号.星期几飞行.最 ...

  3. 考虑题4所示的日志记录_2017年北京语言大学计算机应用技术826数据库与管理信息系统考研强化模拟题...

    一.简答题 1. [1]考虑下图所示的日志记录: (1)如果系统故障发生在14之后,说明哪些事务需要重做,哪些事务需要回滚. (2)如果系统故障发生在10之后,说明哪些事务需要重做,哪些事务需要回滚. ...

  4. 数据库题库haust_2

    .SQL语言具有数据操作功能,SQL语言的一次查询的结果是一个___D___ A) 数据项      B) 记录      C) 元组             D) 表 2.如果学生表st是使用以下S ...

  5. 国家教学名师谈人工智能通识课程的教与学

    转自:书圈 本文来自浙江工业大学教授.国家教学名师王万良教授于7月26日在2020全球人工智能技术大会上发表的题为"人文社科大学生的人工智能教育:人工智能通识课程建设探索"的演讲, ...

  6. 零基础学python免费网课-零基础学Python量化投资,超值线上课程反复回看

    原标题:零基础学Python量化投资,超值线上课程反复回看 超值网络课程 量化投资是一种严谨.系统化的投资方式,相比起传统投资,量化投资风险低回报高,但是它要求投资者使用数据处理分析.计算机编程技术. ...

  7. 数据库中查出的树形,获取其所有子孙(递归方式)

    数据库中查出的树形,获取其所有子孙(递归方式) 如下用户类 public class User implements Serializable {/*** id*/private String id; ...

  8. MySQL数据库题库

    一.选择题 第1章 数据库系统概述 1.DBS是(  A )的简写. A.数据库系统  B.数据库管理系统    C.数据库   D.操作系统 2.DBMS是(  B   )的简写 A.数据库系统  ...

  9. 检索所学课程包含学生S3所学课程的学生学号

    检索所学课程包含学生S3所学课程的学生学号 问题描述 最新 创建表sql代码 问题描述 书上的解法感觉很反正常人思维.自己写了一个. 分别有表如下: 教师关系   T (T#,TNAME,TITLE) ...

最新文章

  1. java中属性加参数_java – 具有类型参数的注释属性
  2. 在linux下tomcat报javax.net.ssl.SSLHandshakeException sun.security.validator.ValidatorException: PKIX
  3. 数据库系统概念总结:第十二、十三章 查询处理和查询优化
  4. 【算法分析与设计】浅析算法复杂度
  5. 阿里巴巴Java开发 之 编程规约
  6. 将list中的数据组成用逗号分隔的字符串
  7. android 修改系统默认语言
  8. 计算机组成x什么意思,cpu后面带x是什么意思
  9. Android 自定义锁屏_开发自定义ROM提速:红米Note 6 Pro等Android Pie内核源代码上线...
  10. 固态硬盘SSD的接口如何选择
  11. 【Nand2tetris】Project02
  12. golang中channel的传递
  13. 关于数学建模的个人见解(实验室专用)
  14. 一看就懂手机里的PDF转换成PPT的方法
  15. php get 号,php-GET请求不带问号
  16. 关于语音会议自动转文字系统的想法
  17. 现代密码学实验5 数字签名ElGamal签名方案
  18. 深度强化学习主流算法介绍(二):DPG系列
  19. 你知道 水箱浮球液位开关是怎么工作的吗
  20. 用c语言设计通讯录软件下载,C语言编写的通讯录.doc

热门文章

  1. python df删除特定行_pandas.DataFrame删除/选取含有特定数值的行或列实例
  2. NOIP 为什么要学 数学
  3. java如何实现导出Excel(附源码)--文末送书
  4. 百万调音师—Audition降噪
  5. lgp970 安全问题,不能识别sim卡
  6. 流式检测巨噬细胞方法
  7. 5v功放芯片哪个音质好
  8. 在bluehost如何使用WHM面板和ssh链接添加附加IP
  9. 一个优秀的团队,就该这样定目标
  10. 出生日期正则表达式丨出生日期年月日正则如何表达?