MySQL数据库 - 复杂查询

文章介绍了10个与IT技术相关的SQL编程练习题,涉及数据库操作如数据交换、座位调整、成绩排名、人流量统计、学生成绩分析等,展示了SQL在实际场景中的应用。
摘要由CSDN通过智能技术生成

第1关 交换工资

#请在此添加实现代码
########## Begin ##########

update tb_Salary
set sex = case when sex = 'm' then 'f' else 'm' end;


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

第2关 换座位


#请在此添加实现代码
########## Begin ##########



UPDATE tb_Seat AS s1
JOIN tb_Seat AS s2 ON s1.id = s2.id - 1
SET s1.name = s2.name,
    s2.name = s1.name
WHERE s1.id % 2 = 1;

select * 
from tb_Seat;

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

第3关 分数排名

#请在此添加实现代码
########## Begin ##########
SELECT 
    s1.Score,
    (
        SELECT COUNT(distinct s2.Score) + 1
        FROM score s2
        WHERE s2.Score > s1.Score
    ) AS Rank
FROM 
    score s1
ORDER BY 
    s1.Score DESC;


SELECT 
    s1.Score,
    (
        SELECT COUNT(s2.Score) + 1
        FROM score s2
        WHERE s2.Score > s1.Score
    ) AS Rank
FROM 
    score s1
ORDER BY 
    s1.Score DESC;

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

第4关 体育馆的人流量

#请在此添加实现代码
########## Begin ##########

#请在此添加实现代码
########## Begin ##########
 
 select * from gymnasium where exists (
     select * from (
             select a.date a1,b.date b1,c.date c1 from 
                         (select * from gymnasium where visitors_flow >=100) a
                                     inner join
                                                 (select * from gymnasium where visitors_flow >=100) b
                                                             on b.id-a.id=1
                                                                         inner join
                                                                                     (select * from gymnasium where visitors_flow >=100) c
                                                                                                 on c.id-a.id=2 ) as tb_date
                                                                                                     where gymnasium.date in (a1,b1,c1)
                                                                                                     );
                                                                                                      
                                                                                                      ########## End ##########
########## End ##########

第5关 统计总成绩

 
 #请在此添加实现代码
 ########## Begin ##########
 SELECT tb_class.classname, 
 SUM(CASE WHEN tb_score.chinese >= 60 THEN tb_score.chinese ELSE 0 END) AS chinese,
 SUM(CASE WHEN tb_score.maths >= 60 THEN tb_score.maths ELSE 0 END) AS maths
 FROM tb_score 
 JOIN tb_class ON tb_score.name = tb_class.stuname
 GROUP BY tb_class.classname;
  
  ########## End ##########

第6关 查询学生平均分

#请在此添加实现代码
########## Begin ##########
SELECT s.s_id,s.s_name,IFNULL(ROUND(AVG(sc.s_score), 2), 0.00) AS avg_score
FROM student s
LEFT JOIN score sc ON s.s_id = sc.s_id
GROUP BY s.s_id, s.s_name
HAVING AVG(sc.s_score) < 60 OR COUNT(sc.s_score) = 0;

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

第7关 查询修课相同学生信息

#请在此添加实现代码
########## Begin ##########

SELECT  s_id,s_name,s_sex
FROM student 
WHERE student.s_id  in(SELECT s_id FROM score 
WHERE s_id!='01'AND c_id IN( SELECT c_id FROM score 
WHERE  s_id='01')
GROUP BY s_id HAVING COUNT(*) =(SELECT COUNT(*) FROM score WHERE s_id='01'))
########## End ##########

第8关 查询各科成绩并排序

#请在此添加实现代码
########## Begin ##########
select a.s_id,a.c_id,a.s_score,count(b.s_score)+1 rank from score a left join score b on a.c_id = b.c_id and a.s_score < b.s_score group by a.s_id,a.c_id,a.s_score order by a.c_id,a.s_score desc, count(b.s_score),a.s_id desc;

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

第9关 查询张老师课程成绩最高的学生信息


#请在此添加实现代码
########## Begin ##########

SELECT student.s_id,student.s_name,student.s_sex,score.s_score,course.c_id,course.c_name
FROM student,score,course,teacher
WHERE student.s_id = score.s_id AND score.c_id = course.c_id AND course.t_id = teacher.t_id AND teacher.t_name = '张三' AND score.s_score = (SELECT MAX(s_score)
FROM score,course,teacher 
        WHERE teacher.t_name = '张三' AND score.c_id = course.c_id AND course.t_id = teacher.t_id
    )
########## End ##########

第10关 查询两门课程不及格同学信息


#请在此添加实现代码
########## Begin ##########
SELECT student.s_id,student.s_name,ROUND(AVG(score.s_score)) AS avg_score
FROM student,score
WHERE student.s_id = score.s_id
GROUP BY student.s_id, student.s_name
HAVING SUM(score.s_score < 60) >= 2;

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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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数据库复杂查询是非常重要的数据库操作,可以帮助我们更灵活地处理数据。不同的查询方式可以针对不同的需求进行适配和处理,帮助我们更好地完成任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值