多表连接查询练习

初级练习[5]:多表查询——多表连接 【代码】初级练习[5]:多表查询——多表连接。 阅读详情

题目:

  1. 查询所有订单的订单ID、客户全名和订单日期

  2. 查询状态为 "已发货" 的订单信息,显示订单ID、客户姓名和发货日期

  3. 查询每个订单的商品明细,显示订单ID、产品名称、数量和单价

  4. 查询有备注的订单项,显示订单ID、产品名称和备注内容

  5. 查询使用了运输商的所有订单,显示订单ID、客户姓名和运输商名称

  6. 查询积分高于平均积分的客户所下的所有订单


1.

查询所有订单的订单ID、客户全名和订单日期

 

输入

SELECT orders.order_id, orders.order_date, CONCAT(customers.first_name, ' ', customers.last_name) AS cus_name
FROM orders
INNER JOIN customers ON customers.customer_id=orders.customer_id
ORDER BY orders.order_id;

 输出

详细检查和批改建议 

优点:

  1. 完全符合题目要求:

    • 查询所有订单的订单ID、订单日期和客户全名

  2. 正确的JOIN语法:

    • 使用INNER JOIN明确表关系

    • 连接条件准确(customer_id匹配)

  3. 专业的字段处理:

    • 使用CONCAT组合客户姓名

    • 为组合字段设置别名(AS cus_name)

  4. 清晰的排序:

    • 按order_id排序使结果有序

可选的增强建议(非必需):

  1. 使用表别名简化

  2. 添加LIMIT(如果数据量很大)

  3. 格式化日期显示(如需特定格式):

    DATE_FORMAT(o.order_date, '%Y-%m-%d') AS formatted_date


 

 

2.

查询状态为 "已发货" 的订单信息,显示订单ID、客户姓名和发货日期

 

输入

SELECT orders.order_id, orders.shipped_date, CONCAT(customers.first_name, ' ', customers.last_name) AS cus_name
FROM orders
INNER JOIN customers ON customers.customer_id=orders.customer_id
WHERE status=2
ORDER BY shipped_date;

输出

详细检查和批改建议  

优点:

  1. 正确包含了所有必选字段(订单ID、发货日期、客户全名)

  2. 使用INNER JOIN正确连接表

  3. 准确筛选已发货订单(status=2)

  4. 按发货日期排序(符合业务逻辑)

 

建议的优化点:

  1. 添加表前缀一致性:

    • status字段缺少orders.前缀(虽然在此查询中不会产生歧义)

  2. 使用表别名(最佳实践)

  3. 考虑NULL值处理(如果shipped_date可能为NULL):

    ORDER BY COALESCE(o.shipped_date, '9999-12-31')  -- 将NULL值排到最后
  4. 添加状态说明注释(提高可读性):

    WHERE o.status = 2  -- 2表示'Shipped'状态


 

3.

查询每个订单的商品明细,显示订单ID、产品名称、数量和单价

 

输入

SELECT order_items.order_id, products.name, order_items.quantity, order_items.unit_price 
FROM order_items
INNER JOIN products ON products.product_id=order_items.product_id
ORDER BY order_id;

输出 

详细检查和批改建议 

 

优点:

  1. 完全符合题目要求:

    • 查询订单项的商品明细

    • 包含订单ID、产品名称、数量和单价

  2. 正确的JOIN语法:

    • 使用INNER JOIN明确连接关系

    • 连接条件准确(product_id匹配)

  3. 清晰的排序:

    • 按order_id排序使结果有序

  4. 简洁高效的写法:

    • 直接从关联表获取所需字段

    • 没有不必要的复杂性

可选的增强建议(非必需):

  1. 使用表别名简化

  2. 添加产品ID(便于后续引用)

  3. 处理分页(大数据量时):

    LIMIT 100 OFFSET 0
  4. 格式化价格显示:

    FORMAT(oi.unit_price, 2) AS unit_price


 

 4.

查询有备注的订单项,显示订单ID、产品名称和备注内容

 

输入

SELECT order_item_notes.order_id, 
       order_item_notes.note,
       products.name
FROM order_item_notes
INNER JOIN products ON products.product_id=order_item_notes.product_id
ORDER BY order_item_notes.note_id;

输出

 

详细检查和批改建议  

优点:

  1. 字段选择完全符合题目要求:

    • 订单ID

    • 备注内容

    • 产品名称

  2. 正确的JOIN语法:

    • 准确关联了订单项备注和产品表

  3. 清晰的排序:

    • 按备注ID排序确保结果有序

可选的进一步优化:

  1. 使用表别名(推荐最佳实践)

  2. 限制结果数量(大数据量时)

  3. 添加筛选条件(如果只需要有内容的备注):

    WHERE oin.note IS NOT NULL AND oin.note != ''
  4. 更业务导向的排序:

    ORDER BY oin.order_id, p.name  -- 先按订单号,再按产品名称


 

 5.

查询使用了运输商的所有订单,显示订单ID、客户姓名和运输商名称

输入

SELECT orders.order_id, 
	   CONCAT(customers.first_name,' ', customers.last_name) AS cus_name,
       shippers.name
FROM orders
INNER JOIN customers ON customers.customer_id=orders.customer_id
INNER JOIN shippers ON shippers.shipper_id=orders.shipper_id
WHERE orders.shipper_id IS NOT NULL;

输出

 

详细检查和批改建议 

 

优点:

  1. 完全符合题目要求:

    • 查询使用了运输商的订单

    • 显示订单ID、客户全名和运输商名称

  2. 正确的多表JOIN:

    • 准确连接了orders-customers和orders-shippers

  3. 必要的NULL检查:

    • 使用shipper_id IS NOT NULL确保只查询有运输商的订单

  4. 清晰的查询结构

可选的增强建议: 

  1. 使用表别名简化

  2. 添加排序(虽然题目未要求) 

 


 

 

6.

查询积分高于平均积分的客户所下的所有订单

 

输入

SELECT order_id
FROM orders
WHERE customer_id IN (SELECT customer_id
					  FROM customers
                      WHERE points > AVG(points);

输出 

 

 

详细检查和批改建议  

错误原因:

因为在子查询中使用了聚合函数AVG(points),但没有指定GROUP BY子句,或者没有正确地使用聚合函数。

在MySQL中,不能直接在WHERE子句中使用聚合函数(如AVG(),SUM()等),除非它是在子查询中并且该子查询返回一个单一值。

修改方法:

使用子查询计算平均值。

 

输入

SELECT order_id
FROM orders
WHERE customer_id IN (SELECT customer_id
					  FROM customers
                      WHERE points > (SELECT AVG(points) FROM customers));

输出

注意事项

嵌套三层子查询结构:

  • 最内层计算平均积分;
  • 中间层筛选高积分客户;
  • 外层查询这些客户的订单。

 


 

MySQL 多表查询,联合查询,子查询 ,内、外、自连接介绍,看这一篇就够啦(还含练习题哦) 连接查询 - 内连接 查询两张表的交集数据 阅读详情

相关推荐

day09:约束(主键,唯一,非空,默认)、表与表关系(11,1多,多多)、三大范式、多表查询(非等值、连接查询(显隐内连接,左右外连接,子查询))、多表查询的练习

一 回顾 1.sql语句分类 DDL 主要用于操作数据库 以及数据库表 DML 主要用于操作数据库表中数据 增加 删除 修改 DQL 主要用于操作数据库表中数据 查询 DCL 主要是用于操作用户管理 以及权限管理 2.DDL-对表的操作 A.创建表 create table 表名( 列名 数据类型(长度), ..... ); B.查询所有表 show tables C.删除表 drop table 表名 ...

m0_45209551的博客 1336

MySQL练习——多表联查(99语法和92语法实现)

对于sql92语法来说,表连接用的是where,where筛选用的也是where,混淆在一起不清不楚。注:inner可以省略,写上inner可以增加代码的可读性。1)逗号(“,”)换成(inner)join;表连接和后面的where条件筛选,分离开来。select {*|字段列名}select {*|字段列名}2)where换成on;where 查询条件;

weixin_47540149的博客 719

SQL八套练习题:从单表查询到多表连接,动手练熟

SQL查询是数据处理的核心技能,从基础的单表过滤到复杂的多表关联,语法规则容易背但真正掌握需要反复动手。理解WHERE过滤、GROUP BY分组聚合、JOIN连接原理以及子查询的执行逻辑,是构建高效查询能力的关键。在真实业务中,无论报表统计还是数据分析,都离不开对数据的分组汇总与关联提取,而窗口函数则为排名、累计等场景提供了更简洁的解法。很多初学者卡在能看懂却写不出SQL的瓶颈,根本原因在于缺少系统性练习。本文整理了八套SQL练习题,从单表条件查询、排序分页到多表内连接、外连接、自连接及排名场景,层层递进,

weixin_32705179的博客 337

Mysql多表联查——经典50题

Mysql多表联查

weixin —> Ryan-0713 7571

mysql 多表联接查询练习

mysql,多表联接查询练习,mysql,多表联接内联,外联练习。 mysql,多表联接查询练习,mysql,多表联接内联,外联练习。

四足机器人——机械结构

目录 一、四足机器人腿型: 1、并联腿 2、串联腿 3、 腿的布局(关节配置) 二、四足机器人足端设计: 三、四足机器人膝关节驱动: 1、皮带轮驱动: 2、四连杆或者推杆驱动 四、四足机器人机械整体结构设计细节 一、四足机器人腿型: 1、并联腿 优点:受力角度来说,并联腿比串联腿好,并联腿较为灵活。 2、串联腿 优点:运动范围大 3、 腿的布局(关节配置) 为了使机器人具有较好的稳定性,一般会采用比较低的重心。这就导致了机器人腿的髋关节位置需要位于机器人身体的两侧..

m0_58585940的博客 3万+

MYSQL练习-多表关联查询

题目:多表查询。

sjsnsvsjsm的博客 1340

Sobel原理及计算过程详解

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。首先,我们需要构建一个Sobel算子,通常是一个 3x3 的矩阵。Sobel算子可以分别计算水平和垂直方向的梯度值,然后将两者合并得到总梯度值。索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度近似值。所以,我们假设选择图像矩阵中的点A(1, 1),即第二行第二列的元素,对应的。接下来,我们将使用Sobel算子计算这个点的梯度值。

2301_76461741的博客 1万+

多表关联查询练习

第一题 –1、查询名人表中性别是男的作者 select sname from celebrity where sex = ‘男’; –2、查询静夜思的作者 select c.sname from celebrity c,works w,summary s where s.sid = c.sid and s.wid = w.wid and w.work = ‘静夜思’; select c.sname From summary s INNER JOIN celebrity c on s.sid = c.sid

weixin_45056660的博客 426

LVGL8.x 实体按键与Keypad驱动的无缝对接实战

本文详细解析了LVGL8.x中实体按键与Keypad驱动的两种对接方案:坐标映射的Button方式与事件驱动的Keypad方式。重点阐述了如何模块化裁剪lv_port_indev.c模板文件,并深入讲解了Keypad驱动与Group焦点管理系统的核心协作机制,为无触摸屏的嵌入式设备提供流畅的UI交互解决方案。

weixin_29164497的博客 447

Qt开发实战:QWebEngineView缓存路径详解与自定义配置(Windows/Linux)

本文详细解析了Qt框架中QWebEngineView组件的缓存机制,提供了Windows和Linux系统下的默认缓存路径及自定义配置方案。通过实战代码示例,展示了如何实现跨平台缓存路径管理、权限设置以及企业级应用中的多用户隔离策略,帮助开发者有效管理Web内容缓存,提升应用性能和数据安全性。

weixin_42519826的博客 404

Mysqk 多表连接查询的 “打字练习”

会显示如下窗口,我们 点击 自定义课程 ——> 再点击 左上角的 添加 有单个添加、批量添加 大家可以根据自己的需求来,进行相对应的选择 *** 保存好后,点击退出该窗口,重新再次,点击 打字测试 ——> 点击你刚刚将练习内容的复制到的那个模式里,——> 选择右上角的 课程选择 ——> 自定义课程 ,从中你可以看到,你刚刚自行编辑的打字练习内容中 课程名称 ,选择你所需要的,就可以开始你的打字练习之旅了.........

weixin_61635597的博客 398

Python全栈入门到实战【JavaScript篇 15】async/await与Fetch API,打通前后端数据通道

Fetch API是浏览器内置的现代HTTP请求接口,用于向服务器发送请求并获取响应。它是(XHR)的替代品。学习Fetch的目标非常明确——用JS从后端API获取数据,并渲染到前端页面。这标志着前后端数据通道的打通,是实现全栈开发的核心技能。try {// 等待Promiseconst parallel = await Promise.all([ // 并行等待]);

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1981

MySQL Workbench 连接与多表 / 嵌套查询练习

通过 MySQL Workbench 成功连接数据库后,我们进行了多表连接(内连接、左连接、右连接、全外连接模拟)和不同位置(WHEREHAVINGFROMSELECT后)的嵌套查询练习。多表连接能有效整合关联数据,嵌套查询则让复杂条件筛选和数据聚合更加灵活,在实际数据库操作中,它们常常结合使用,以满足多样化的数据查询需求。借助 MySQL Workbench 的图形化界面,我们能更直观地编写、执行 SQL 语句并查看结果,提升数据库操作效率。

wjndufb的博客 1612

2026 AI Agent Harness Engineering 生态报告:开源工具链的现状与未来趋势

IEEE P2863-2025《通用人工智能自主代理技术架构与评估规范》于2025年11月正式发布,将AI Agent(通用人工智能自主代理)定义为:一种具备感知(Perception)、记忆(Memory)、推理(Reasoning)、规划(Planning)、行动(Action)五大核心能力闭环,能够在无显式指令覆盖全部环节的前提下,自主完成特定领域或开放领域复杂任务的智能实体。

AI 算法实战派 497

从原理到实战:深入解析 Synopsys VCS 仿真快照技术,提升验证效率

VCS Checkpoint 技术摘要 VCS Checkpoint 是 Synopsys VCS 提供的仿真状态快照功能,可将完整的仿真状态(寄存器、存储器、时钟、随机种子等)序列化保存。主要应用场景包括:跳过耗时初始化阶段、覆盖率驱动验证、Debug复现和UVM分阶段验证。核心原理是对仿真内核状态的完整序列化,需注意文件句柄等特殊对象需手动处理。 使用方式: 编译时添加 -checkpoint 选项 运行时通过 $save 系统任务或 +checkpoint 参数保存状态 通过 +restore 参数恢

元直的博客 248

Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例

Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例

weixin_46838716的博客 1769

STM32实现简单的智能电梯控制

上述代码实现了一个简单的智能电梯控制器。电梯的状态包括IDLE(停止)、UP(向上移动)和DOWN(向下移动)三种状态。通过向上和向下按钮的按下,可以控制电梯移动到指定的楼层。在主循环中,不断读取当前楼层的按钮状态,并根据电梯状态决定执行的动作。具体的楼层数量和按钮的GPIO引脚可以根据实际情况进行调整。要实现简单的智能电梯控制,我们可以使用STM32微控制器来实现。

2401_85258012的博客 336

MySQL数据库 多表查询 交叉连接 自然连接 内连接 自连接 外连接 子查询 多表查询练习 单表查询练习

** 1,多表查询前创建表 ** 1,创建库test create database test; 2,创建部门表dept(deptno dname loc) create table dept( deptno int(4) primary key, dname varchar(20), loc varchar(20) ); 3,创建雇员表emp ...

嘎嘎_哈 1961

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【MySQL数据库】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法

本文我们将系统的讲解多表查询。包括面试可能问到的笛卡尔积现象,以及多种多表查询的类型:联合查询、内连接、左外连接、右外连接、子查询,通过练习的方式快速掌握知识。每次练习都可能设计新的知识盲区,都会进行补充,欢迎阅读。

Stark的博客 2668

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

单表及多表连接查询练习

单表及多表连接查询练习

m0_70940822的博客 455

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MySQL多表连接查询练习

1.查询student表的所有记录 2.查询student表的第2条到4条记录 3.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息 4.从student表中查询计算机系和英语系的学生的信息 5.从student表中查询年龄18~22岁的学生信息 6.从student表中查询每个院系有多少人 7.从score表中查询每个科目的最高分 8.查询李四的考试科目(c_name)和考试成绩(grade) 9.用连接的方式查询所有学生的信息和考试信息

zero_smile的博客 344

MySQL 多表连接查询练习 (四)

测试用数据来源于Oracle数据库中的测试数据MySQL数据库表:  employees员工表,departments部门表, locations地址表库表测试试数据#----表连接查询练习 SELECT * FROM departments; select * from departments select * from locations #--1.显示所有职员的姓名及其所在部门的名称和工资...

vcfriend的专栏 5021

26.5 多表查询:内连接(隐式、显示)、外连接(左外、右外)、嵌套查询、练习

一对多 一对多(1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品 一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键

Birdlun的博客 951

【多表查询之自连接、联合查询、子查询及练习】

【多表查询之自连接、联合查询、子查询及练习】

qq_44875230的博客 554
上一篇: MySQL中 IS NOT NULL 和 != NULL 有区别吗?
下一篇: MySQL中 GROUP BY 子句语法及注意事项
SnowCodeJourney
博客等级 码龄1年 19粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值