MySQL数据库 - 复杂查询(一)

一个不知名大学生,江湖人称菜狗
original author: Jacky Li
Email : 3435673055@qq.com

Time of completion:2024.03.27
Last edited: 2024.03.27

目录

MySQL数据库 - 复杂查询(一)

第1关:交换工资

任务描述

相关知识

编程要求

测试说明

代码如下:

第2关:换座位

任务描述

相关知识

编程要求

测试说明

代码如下:

第3关:分数排名

任务描述

相关知识

编程要求

测试说明

代码如下:

第4关:体育馆的人流量

任务描述

相关知识

编程要求

测试说明

代码如下:

第5关:统计总成绩

任务描述

相关知识

编程要求

测试说明

代码如下:

作者有言


MySQL数据库 - 复杂查询(一)

第1关:交换工资

任务描述

本关任务:给定一张 tb_Salary 表,如下所示,有 m = 男性f = 女性的值。交换所有的 fm 值(例如,将所有 f 值更改为 m,反之亦然)。

idnamesexsalary
1Elonf7000
2Donnyf8000
3Careym6000
4Karinf9000
5Larisam5500
6Soram500

要求只使用一句更新update语句,且不允许含有任何select语句完成任务。

相关知识

编程要求

根据提示并仔细阅读右侧代码,在Begin - End区域内进行代码补充。

提示

可能需要使用到 CASE 函数或 IF 函数,使用方法如下实例:

  1. SELECT
  2. case ###如果
  3. when sex='1' then '男' ###sex='1',则返回值'男'
  4. when sex='2' then '女' ###sex='2',则返回值'女'
  5. else '其他' ###其他的返回'其他’
  6. end ###结束
  7. from sys_user ###整体理解: 在sys_user表中如果sex='1',则返回值'男'如果sex='2',则返回值'女' 否则返回'其他’
  1. select if(sex='1','男','女') as sex from sys_user; ###如果sex='1'则返回值'男' 否则返回值为'女'
测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

预期输出:

  1. +----+--------+-----+--------+
  2. | id | name | sex | salary |
  3. +----+--------+-----+--------+
  4. | 1 | Elon | m | 7000 |
  5. | 2 | Donny | m | 8000 |
  6. | 3 | Carey | f | 6000 |
  7. | 4 | karin | m | 9000 |
  8. | 5 | Larisa | f | 5500 |
  9. | 6 | Sora | f | 500 |
  10. +----+--------+-----+--------+

代码如下:

#请在此添加实现代码
########## Begin ##########
-- update tb_Salary set sex = if(sex = 'f','m','f');
update tb_Salary set sex = case when sex= 'm' then'f' else'm' end;
########## End ##########

第2关:换座位

任务描述

本关任务:改变相邻俩学生的座位。

小美是一所中学的信息科技老师,她有一张 tb_Seat座位表,平时用来储存学生名字和与他们相对应的座位 id

tb_Seat表结构数据如下:

idname
1Elon
2Donny
3Carey
4Karin
5Larisa

现在小美想改变相邻俩学生的座位(若学生人数为奇数,则无需改变最后一位同学的座位),现在需要你编写SQL输出小美想要的的结果。

相关知识

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

预期输出:

  1. id name
  2. 1 Donny
  3. 2 Elon
  4. 3 Karin
  5. 4 Carey
  6. 5 Larisa

代码如下:

#请在此添加实现代码

########## Begin #########
-- select
--     case 
--     when id%2=0 then id-1 
--     else (case when id=(select max(id) from tb_Seat) then id else id+1 end
--         ) end
--     as id, name
-- from tb_Seat order by id;
SELECT 
CASE 
WHEN MOD(id,2)=1 AND id!=(SELECT MAX(id) FROM tb_Seat) THEN id+1
WHEN MOD(id,2)=0 THEN id-1 
ELSE id 
END 
AS id,name FROM tb_Seat ORDER BY id;

-- SELECT IF(id%2=0,id-1,IF(id=5,id,id+1)) AS id,name 
-- FROM tb_Seat  ORDER BY id;
########## End ##########

第3关:分数排名

任务描述

本关任务:编写SQL查询来实现二种排名方式的分数排名。

score表结构信息如下:

IdScore
13.52
23.65
34.23
43.85
54.23
63.65

如果两个分数相同,则两个分数排名(Rank)相同。

情况一:平分后的下一个名次是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。例:1、1、2、3、4、4。

情况二:排名是非连续的。例:1、1、1、4、4、6。

相关知识

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

代码如下:

#请在此添加实现代码

########## Begin ##########
select Score,(select count(distinct Score) from score as s2 where s2.Score>=s1.Score) as Rank
from score as s1 order by Score desc;
select Score,(select count(Score)+1 from score as s2 where s2.Score>s1.Score) as Rank
from score as s1 order by Score desc;

########## End ##########

第4关:体育馆的人流量

任务描述

本关任务:某市建了一个新的体育馆,每日人流量信息被记录在gymnasium表中:序号 (id)、日期 (date)、 人流量 (visitors_flow)。

请编写一个查询语句,找出人流量处于高峰的记录 id、日期 date 和人流量 visitors_flow,其中高峰定义为前后连续三天人流量均不少于 100。

gymnasium表结构数据如下:

iddatevisitors_flow
12019-01-0158
22019-01-02110
32019-01-03123
42019-01-0467
52019-01-05168
62019-01-061352
72019-01-07382
82019-01-08326
92019-01-0999

提示:每天只有一行记录,日期随着 id 的增加而增加。

相关知识

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

预期输出:

  1. +----+------------+---------------+
  2. | id | date | visitors_flow |
  3. +----+------------+---------------+
  4. | 5 | 2019-01-05 | 168 |
  5. | 6 | 2019-01-06 | 1352 |
  6. | 7 | 2019-01-07 | 382 |
  7. | 8 | 2019-01-08 | 326 |
  8. +----+------------+---------------+

代码如下:

#请在此添加实现代码

########## Begin ##########
select distinct a.*
from gymnasium a,gymnasium b,gymnasium c
where a.visitors_flow >= 100 and b.visitors_flow >= 100 and c.visitors_flow >= 100 and
      (
       (a.id+1 = b.id and b.id+1 = c.id) or
       (a.id-1 = b.id and a.id+1 = c.id) or
       (a.id-1 = c.id and a.id+1 = b.id) or
       (a.id-2 = b.id and a.id-1 = c.id) or
       (a.id-1 = b.id and a.id-2 = c.id)
      )
order by a.id

########## End ##########

第5关:统计总成绩

任务描述

本关任务:计算每个班的语文总成绩和数学总成绩,其中低于 60 分的成绩不记入总成绩。

tb_score结构数据:

namechinesemaths
A8998
B9989
C5566
D8866
E5566
F8899

tb_class表结构数据:

stunameclassname
AC1
BC2
CC3
DC2
EC1
FC3
相关知识

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

预期输出:

  1. +-----------+---------+-------+
  2. | classname | chinese | maths |
  3. +-----------+---------+-------+
  4. | C1 | 89 | 164 |
  5. | C2 | 187 | 155 |
  6. | C3 | 88 | 165 |
  7. +-----------+---------+-------+

代码如下:

#请在此添加实现代码
########## Begin ##########
select classname,sum(if(chinese>=60,chinese,0)) chinese,sum(if(maths>=60,maths,0)) maths from tb_score a,tb_class b where a.name=b.stuname group by b.classname;

########## End ##########

作者有言

如果感觉博主讲的对您有用,请点个关注支持一下吧,将会对此类问题持续更新……

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 当我们需要从一个数据库中获取更加特定、复杂的数据时,就需要使用复杂查询了。MySQL数据库支持各种类型的复杂查询,包括聚合函数、联合查询、子查询、嵌套查询等等。下面是一些复杂查询的示例: 1. 聚合函数:使用聚合函数可以对一列数据进行统计计算,如求平均值、最大值、最小值等等。 2. 联合查询:联合查询可以将多个SELECT语句的结果合并为一个结果集。 3. 子查询:子查询是一个SELECT语句,嵌套在另一个SELECT语句中,用于过滤结果集或作为计算的基础。 4. 嵌套查询:嵌套查询是在一个SELECT语句中嵌套了另一个SELECT语句,用于从多个表中检索数据。 复杂查询可以帮助我们更快、更准确地获取我们所需的数据。但是,在编写复杂查询时,需要考虑查询效率和可读性等问题,以便得到更好的查询性能和更易于维护的查询语句。 ### 回答2: MySQL数据库是一个功能强大的数据库管理系统,它允许用户进行各种复杂查询。在本文中,我们将讨论复杂查询中的一些重要问题。 首先,复杂查询通常涉及使用多个表格。例如,如果我们需要从两个表格中获取数据,则需要使用JOIN语句。JOIN语句使我们能够将两个或多个表格中的数据进行匹配。使用JOIN语句需要非常小心,因为如果不正确地使用,会极大地降低查询效率。 其次,复杂查询经常使用嵌套或子查询来获取特定的数据。嵌套查询是一个查询中嵌套了另一个或多个查询。子查询通常在主查询中使用,以匹配或过滤特定的结果。 第三,复杂查询需要使用各种运算符和条件。在我们的查询中,运算符是用于比较值的符号。例如,等于,小于,大于等。条件是用于限制查询结果的表达式。例如,WHERE子句可以使用条件过滤查询结果。 最后,我们需要了解如何使用MySQL函数来处理和操作数据。MySQL提供了许多内置函数,例如SUM,AVG和COUNT,可以用于聚合和操作数据。 综上所述,MySQL数据库中的复杂查询需要细心操作,涉及多个表格和多个查询,使用各种运算符和条件,并使用MySQL函数来处理和操作数据。正确使用这些功能,可以大大提高查询效率,并生成准确的结果。 ### 回答3: MySQL数据库是一款非常流行的关系型数据库管理系统。在进行数据库操作时,常常需要进行复杂查询复杂查询就是指需要同时使用多个条件进行查询,而这些条件之间的关系不是简单的等于关系或者区间关系。 MySQL数据库提供了许多函数和运算符来支持复杂查询。其中,常见的函数包括聚合函数、字符串函数、日期函数等等。这些函数可以帮助我们对数据进行分组、排序、过滤等操作,从而得到我们需要的数据结果。 在进行复杂查询时,我们需要使用SQL语言来编写查询语句。SQL语言是一种用于管理关系型数据库的语言,它具有灵活性和强大的功能性。 常见的复杂查询包括多表联结查询、嵌套查询、子查询等等。这些查询可以帮助我们查找数据的精确匹配、范围匹配、模糊匹配等不同的需求。 多表联结查询是指通过多个表中的字段来连接、匹配、过滤这些表的数据。这种查询常用于需要使用多个表中的数据来得到更完整的信息的场景中。 嵌套查询也是一种非常常见的查询方式,它可以通过嵌套多个查询语句来实现复杂查询。嵌套查询中内外层查询之间的关系是互相嵌套的,内层查询可以使用外层查询的结果,或者通过子查询来限制外层查询的结果。 子查询就是通过一个查询给另一个查询提供限制条件,限制条件可以是精确匹配、范围匹配、模糊匹配等等。子查询可以用来查询一个表中符合某种条件的数据,然后再使用这些数据来继续进行查询。 综上所述,MySQL数据库复杂查询是非常重要的数据库操作,可以帮助我们更灵活地处理数据。不同的查询方式可以针对不同的需求进行适配和处理,帮助我们更好地完成任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羁旅少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值