MySQL周内训参照3、简单查询与多表联合复杂查询

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL周内训参照3、简单查询与多表联合复杂查询
编号 人员 题目 总分数 题干 提交内容 得分标准
5 DBA 基础查询 10 SQL要求:
1、查询用户信息,仅显示用户的姓名与手机号,用中文显示列名。
2、根据商品名称进行模糊查询,模糊查询需要可以走索引,需要给出explain语句。
3、统计用户订单信息,查询所有用户的下单数量,并进行倒序排列。
提交3条sql与对应的结果截图 1、中文显示姓名列与手机号列(2分)
2、使用explain测试给出的查询语句,需要显示走了索引查询。(3分)
3、使用聚合函数查询处所有用户的订单数量(2分),倒序排列结果(3分),(共5分)。
6 DBA 复杂查询 15 SQL要求:
1、查询用户的基本信息,钱包信息。
2、查看订单中下单最多的产品对应的类别。
3、查询下单总金额最多的用户,并查询用户的全部信息与当前钱包余额。
提交3条sql与对应的结果截图 1、正确显示用户信息(1分),正确显示用户钱包信息(1分),正确进行多表联合查询(2分)(共4分)
2、正确使用聚合函数(2分),正确使用子查询(2分),正确显示结果(1分),(共5分)
3、正确使用聚合函数(2分),正确使用子查询(2分),正确进行多表联合查询(2)(共6分)

基础查询

1、查询用户信息,仅显示用户的姓名与手机号,用中文显示列名。中文显示姓名列与手机号列

SELECT username AS '姓名', phone AS '手机号' FROM user;

2、根据商品名称进行模糊查询,模糊查询需要可以走索引,需要给出explain语句。使用explain测试给出的查询语句,需要显示走了索引查询。

CREATE INDEX idx_product_name ON product(product_name);

不能用模糊查询的符号作为查询的开头,否则不走索引。

EXPLAIN SELECT * FROM product WHERE product_name LIKE '关键词%';

可以看到已经走了索引了。

3、统计用户订单信息,查询所有用户的下单数量,并进行倒序排列。使用聚合函数查询处所有用户的订单数量(2分),倒序排列结果(3分),(共5分)。

SELECT user_id, COUNT(order_id) AS '订单数量'
FROM `order`
GROUP BY user_id
ORDER BY `订单数量` DESC;

order表共计10条数据,结果正确。

复杂查询

1、查询用户的基本信息,钱包信息。正确显示用户信息(1分),正确显示用户钱包信息(1分),正确进行多表联合查询(2分)(共4分)

SELECT 
    u.user_id, -- 选择用户的用户ID
    u.username, -- 选择用户名
    u.email, -- 选择邮箱
    u.phone, -- 选择电话
    uw.wallet_id, -- 选择钱包ID
    uw.balance -- 选择钱包余额
FROM 
    user u -- 从用户表中选择数据
JOIN 
    user_wallet uw ON u.user_id = uw.user_id; -- 使用JOIN连接用户表和钱包表,连接条件是两个表中的user_id相同

2、查看订单中下单最多的产品对应的类别。正确使用聚合函数(2分),正确使用子查询(2分),正确显示结果(1分),(共5分)

基础写法:

select type_name '下单最多的产品类别' 
from product p 
INNER join 
product_type pt 
on p.type_id=pt.type_id 
where 
product_id =
(select 
product_id 
from order_info 
GROUP BY product_id 
ORDER BY count(product_id) desc 
limit 1);

标准写法:

SELECT 
    pt.type_name -- 选择产品类型名称
FROM 
    product p -- 从产品表中选择数据
JOIN 
    product_type pt ON p.type_id = pt.type_id -- 使用JOIN连接产品表和产品类型表,连接条件是产品表中的type_id与产品类型表中的type_id相同
JOIN 
    (SELECT 
         product_id, -- 子查询中选择产品ID
         COUNT(order_id) AS order_count -- 子查询中对每个产品ID的订单ID进行计数,并命名为order_count
     FROM 
         order_info -- 子查询从订单详情表中选择数据
     GROUP BY 
         product_id -- 按产品ID进行分组
     ORDER BY 
         order_count DESC -- 按订单数量降序排列
     LIMIT 1) oi ON p.product_id = oi.product_id; -- 子查询的结果作为临时表oi,与产品表通过product_id进行连接

由于订单详情中能看到产品id2的数量是最多的,产品2的类型就是笔记本电脑,结果正确。

3、查询下单总金额最多的用户,并查询用户的全部信息与当前钱包余额。正确使用聚合函数(2分),正确使用子查询(2分),正确进行多表联合查询(2)(共6分)

基础写法:

select * 
from `user` 
join 
user_wallet wu 
on `user`.user_id=wu.user_id 
where 
wu.user_id=
(
select user_id 
from `order` 
group by user_id 
ORDER BY sum(total_price) desc 
limit 1
);

标准写法:

SELECT 
    u.*, -- 选择用户的所有信息
    uw.wallet_id, -- 选择钱包ID
    uw.balance -- 选择钱包余额
FROM 
    user u -- 从用户表中选择数据
JOIN 
    (SELECT 
         user_id, -- 子查询中选择用户ID
         SUM(total_price) AS total_spent -- 子查询中对每个用户的订单总金额进行求和,并命名为total_spent
     FROM 
         `order` -- 子查询从订单表中选择数据
     GROUP BY 
         user_id -- 按用户ID进行分组
     ORDER BY 
         total_spent DESC -- 按总消费金额降序排列
     LIMIT 1) o ON u.user_id = o.user_id -- 子查询的结果作为临时表o,与用户表通过user_id进行连接
JOIN 
    user_wallet uw ON u.user_id = uw.user_id; -- 使用JOIN连接用户表和钱包表,连接条件是两个表中的user_id相同

对应7号是郭靖,结果正确,没有问题。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 关系型数据库 MySQL
提高MySQL查询性能的方法有很多
提高MySQL查询性能的方法有很多
152 7
|
1月前
|
存储 关系型数据库 MySQL
提高MySQL的查询性能
提高MySQL的查询性能
66 4
|
8天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
37 9
|
9天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
32 3
|
15天前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
13天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
69 1
|
19天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
16天前
|
SQL 关系型数据库 MySQL
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
36 1
|
14天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
45 0
|
16天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
29 0