在MySQL中,

把成绩低于总平均成绩的女同学的的成绩提高5%

#首先我们需要确定[成绩表]里是否存在[外键]

如果不存在,那么我们直接进行update语句即可,

如果存在[外键],我们是没办法进行更改成绩的,

那么我们需要先把这个[成绩表]备份一下,

备份/复制一个表的语法是:

create table 新表名 select * from 旧表名;

相应的如果[成绩表]名为"sc"的话,就随便创建一个新表,表名为"sc1",那么语法就是:

create table sc1 select * from sc;

备份完[成绩表]之后,

就可以进行更改操作了,

根据题目,首先我们需要确定几个条件,

第一,总平均成绩

第二,成绩低于总平均成绩的人

第三,所有的女生

那么,好,求出平均成绩的语法是:

select avg(成绩) from 表名;

在[成绩表]里,成绩的字段名为:degree,并且需要在刚才的新表中才可以更改,所以就以[sc1]表为例,具体语法:

select avg(degree) from sc1;

第一步到此为止。

接着,成绩低于总平均成绩的人,语法:

where degree < (select avg(degree) from sc1);

第二步到底结束。

接着,所有的女生,有性别的表是[学生表],所以我们要在[学生表]里查询,语法:

select * from student where ssex="女";

但是,我们需要先要想一想,我们查出了所有的女生,但是我们肯定不需要她们所有的信息,只需要其中的一个项(字段)即可,[学生表]和[成绩表]里都有的字段是[学号]"sno",那么就用[学号]这个字段即可。所以上面的语法要改为:

select sno from student where ssex="女";

那么,好,第三步到此结束。

更新/修改 的语句是:

update 表名 set 列名=表达式... where 条件语句;

所以完整的语句是:

update sc1 set degree=degree*1.05
where sno in (select sno from student where ssex="女")
and degree<(select * from (select avg(degree) as degree from sc1) as a);

好,没了,就这些。

细心的话,会注意到,作为条件的话,一般作为条件的都是一个数据(单个数据),比如[平均成绩]是一个数,比如性别"女"。

但是,

性别为"女"的人的学号是一整列学号,竟然也可以作为条件查询!我还不知道答案的时候,思来想去,不知道如何把一整列学号当作一个条件来使用。

结果一看答案。

惊了!

竟然只用了一个"in"就可以把一整列当作一个条件。

谢谢评论里的提醒,确实是我有地方写错了,这个题我是用Oracle写出来的,我没想到用mysql写出来会出错。

上面的语句已经使用mysql的语法更正。下面说一下会出错的地方有哪些?

两个报错:

报错一:

> 1093 - You can't specify target table 'sc' for update in FROM clause
> 时间: 0.001s

报错翻译是:不能在FROM子句中为UPDATE指定目标表‘sc’。

也就是说,mysql里面,需要update的表和update后面where条件里面的子查询不能是同一个表。(我update的表是sc1,update后面where里面的子查询也是sc1)

这样写会报错:

update sc1 set degree=degree*1.05
where sno in (select sno from student where ssex="女")
and degree<(select avg(degree) as degree from sc1);

那怎么解决呢?只要不是同一个表就行的话,那就把update后面where里面的子查询外面再套一个select。

这样的话,update后面where语句里面的子查询就成了一张临时表。from后面跟一个表名,这一步会让mysql去硬盘里查找是否存在这张表,若存在,我就把这个表的数据形成结果集,拿出来放到内存里,现在我从外面再套一个select from,就是用内存里面的这个结果集里面去查询了,不再是直接从硬盘里去查找了。

报错二:

> 1248 - Every derived table must have its own alias
> 时间: 0s

报错翻译:每个派生表都必须有自己的别名。

也就是说,mysql里面的嵌套子查询需要一个别名。这个报错我在Oracle里面没有见过。现在发现mysql会有这样的问题。

我这样写就会报错:

select * from (select avg(degree) as degree from sc1);

也就是说,外面的这个select from后面的临时表需要一个别名。

如何解决这个报错呢?

解决办法就是,每当遇到一个子查询时,外面的from都加一个别名即可。(别名就是另一个名字,是什么无所谓,只要你理解你知道即可,你给伙伴看的时候一眼就知道啥意思就行,当然了项目中的话,最好别名是有意义的。)

如下:

select * from (select avg(degree) as degree from sc1) as a;

【MySQL】把成绩低于总平均成绩的女同学的的成绩提高5%相关推荐

  1. mysql数据库更新_将低于总平均成绩的女生的成绩提高5分

    将低于总平均成绩的女生的成绩提高5分 该更新需要用到 " update 表名 set 更新表达式 where 条件 " 语句. 根据题意,"女生"需要用到含有性 ...

  2. 低于90分的成绩 java_查询平均成绩低于60分的学生学号、姓名及成绩。

    查询平均成绩低于60分的学生学号.姓名及成绩.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 查询平均成绩低于60分的学 ...

  3. 2021高考无准考证成绩查询,2021考研没有准考证号怎么查成绩

    2021考研没有准考证号怎么查成绩2020-12-10 11:02:14文/徐克达 考研初试结束后,大家最关心的就是成绩的事情了,那么考研没有准考证号怎么查成绩呢?下面是小编整理的详细内容,一起来看看 ...

  4. 将低于总平均分成绩的女同学的成绩提高5%

    有学生表s={sno学号,sex性别......}; 学生课表sc={sno学号,cno课程号,score成绩......}; 问题:将低于平均分成绩的女同学的成绩提高5% update sc set ...

  5. MySQL 查询学生的总成绩并进行排名_MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况)...

    MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况) MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况) 我的表结构: 先放代码 -- 查询各科成绩前三名的记录(不考虑成绩并列情 ...

  6. 6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: ```cpp struct stu

    6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node *c ...

  7. java学生-成绩关联实体_java毕业设计_springboot框架的学生成绩智能管理

    这是一个基于java的毕业设计项目,毕设课题为springboot框架的学生成绩智能管理, 是一个采用b/s结构的javaweb项目, 开发工具eclipsei/eclipse, 项目框架jsp+sp ...

  8. 运动会成绩管理java代码_基于jsp的运动会成绩管理-JavaEE实现运动会成绩管理 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的运动会成绩管理, 该项目可用各类java课程设计大作业中, 运动会成绩管理的系统架构分为前后台两部分, 最终实现在 ...

  9. python体能达标成绩_Python+Excel数据分析实战:军事体能考核成绩评定(九)评定个人等级...

    这一章我们实现个人成绩的等级评定,根据单杠.仰卧起坐.蛇形跑.3公里跑成绩以及体型,综合评定个人等级. 相关规定:体型合格就不用考虑单项不合格的情况,只看通用训练科目成绩总分(单杠.仰卧起坐.蛇形跑. ...

最新文章

  1. CSS样式:position: absolute
  2. 【Flutter】Flutter 资源文件使用 ( 导入资源图片 | 使用图片资源 )
  3. java线程概念_《Java基础知识》Java线程的概念
  4. WPF 实现图片切成九宫格控件~
  5. 142.4. Gearman
  6. ubuntu 更改语言桌面_让 Ubuntu 滚动更新
  7. 七嘴八舌Google
  8. 世界上最恐怖的格斗比赛---黑市拳赛
  9. Java中遍历Map集合的3种方式
  10. JavaScript基础大总结
  11. ccxprocess启动项可以禁用么_启动项禁用
  12. 将进酒:写在26岁生日这一天
  13. mac c语言运行程序,Mac运行C语言
  14. MATLAB的学习——基本操作和矩阵操作
  15. 解决hexo部署github时hexo d成功,但github仍显示初始页面问题
  16. 物联网与无线传感器网络期末考试复习资料(教材--刘伟荣,何云--电子工业出版社)
  17. Mysql输错命令后如何退出
  18. 最全最强解析:支付宝钱包系统架构内部剖析(架构图)
  19. 笔记本F1音量键常亮,电脑没声音?这里有妙招。
  20. 你必须知道的 10 个元宇宙最佳案例

热门文章

  1. 2023全国特种作业高压电工模拟一[安考星]
  2. Winform的消息提示框帮助类
  3. C语言实现三子棋、五子棋、扫雷游戏合集详解
  4. 用HTML和CSS简单语法写的一个简历Demo
  5. 笔记本充不进电 Linux,华硕笔记本电池充不进电
  6. 怎样快速借助互联网赚取人生的第一桶金 ?
  7. 马蜂窝数据方向面试总结
  8. Matab拟合离散数据
  9. 医学知识-CTA(CT血管造影)
  10. 单片机实训与毕业设计开放式训练系统QY-DPJ14