为了实现下述代码,首先得有数据库和相应的表格,本文用的是https://blog.csdn.net/qaz13177_58_/article/details/5575711/中的案例,即先用链接中那些命令创建数据库、生成数据表,然后就有了student,teacher,course,score等表。

最近用select做题,经常碰到下面的这两个错误:

1.子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

比如针对下述问题:

1.查询成绩比该课程平均成绩低的同学的成绩表。

我的查询:select * from score where degree<(select avg(degree) from score group by cno),执行后,出现上述错误。

正确查询:SELECT A.* FROM SCORE A WHERE DEGREE<(SELECT AVG(DEGREE) FROM SCORE B WHERE A.CNO=B.CNO)

2.查询出“计算机系“教师所教课程的成绩表。

我的查询:select * from score where cno=
(select course.cno from course where tno=(select tno from TEACHER where teacher.depart='计算机系')),执行后,出现上述错误。

正确查询:select * from score where cno IN

(select course.cno from course INNER JOIN TEACHER ON TEACHER.TNO=COURSE.TNO AND teacher.depart='计算机系')

上述问题2在于用了'='于select子查询(我的查询的第二行括号内语句)之前,但是select子查询返回的不止一个元素,所以出错了。

如果问题改一改,变为:查询出“李诚“教师所教课程的成绩表。那么我们可以用'='构成的嵌套查询语句如下:

select * from score where cno=
(select course.cno from course where tno=(select tno from TEACHER where teacher.depart='李诚'))

为什么这时候可以执行而且得到想要的结果了?这是因为select tno from TEACHER where teacher.depart='李诚'只返回'804'这个tno值,而且select course.cno from course where tno='804'也只返回'3-245'这个cno值,第二行中的两个嵌套子查询都只返回一个值,因此上述语句中的两个'='不会出错。

2.HAVING 子句中的列 'score.DEGREE' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

比如针对下述问题:

查询最低分大于70,最高分小于90的Sno列。

我的查询:select sno from score group by sno having degree between 70 and 90,执行后,出现上述错误。

正确查询:select sno from score group by sno having min(degree)>70 and max(degree)<90

分析,having 后面应该是跟聚合函数的表达式的,直接跟按某一列的行筛选语句会无效。

最新文章

  1. Javascript中,document.getElementsByName获取的就一定是数组了么?
  2. ASP.NET MVC 5 - 控制器
  3. 第47课 Qt中的调色板
  4. ACM: FZU 2107 Hua Rong Dao - DFS - 暴力
  5. JreeeChart入门
  6. C#:安装Windows服务,动态指定服务名及描述
  7. Create STATISTICS,UPDATE STATISTICS
  8. c#反射机制学习和利用反射获取类型信息
  9. 前端开发web组件之旅(一)-- 定义与加载组件
  10. php 生成二维码 代码示例
  11. 关于多条数据转为json格式单次传输的问题 2017.05.27
  12. nginx 报错502Bad Gateway
  13. cpt212b--- 触摸芯片配置
  14. nginx 重定向 说明
  15. docker上搭建consul集群全流程
  16. pip更换国内源
  17. SharePoint读取配置文件
  18. TCP UDP Socket 即时通讯 API 示例 MD
  19. 42. Trapping Rain Water *HARD*
  20. linux thtree level page tables

热门文章

  1. 捕获Task.WhenALl返回的Task的Exception
  2. Python学习---同步条件event/队列queue1223
  3. Task执行内幕与结果处理解密
  4. Lovable eccentric
  5. dba_tables、all_tables、user_tables
  6. 关于浏览器被http://www.51jetso.com/劫持
  7. Junit单元测试多线程的问题
  8. 3spring:生命周期,属性赋值,自动装配
  9. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列(内容已过期,阅读请慎重)
  10. 单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构