数据库2——查询

news2025/5/19 9:46:00

查询

  • 学习内容
  • 学习感受

学习内容

一、实验目的与要求:
1、掌握SQL单表及多表之间的查询
2、掌握统计及分组函数

二、实验内容:
1.简单查询
① 从fruits表中检索s_id为100的供货商所供货的水果名和价格
源码:

SELECT f_name, f_price FROM fruits WHERE s_id = 100;

运行测试结果截图:
在这里插入图片描述

② 查找名称为“apple”的水果的价格
源码:

SELECT f_price FROM fruits WHERE f_name = 'apple';

运行测试结果截图:
在这里插入图片描述

③ 查询价格在2.00元到10.20元之间的水果名称和价格,先按f_price降序排序,再按f_name排序。
源码:

SELECT f_name, f_price FROM fruits 
WHERE f_price BETWEEN 2.00 AND 10.20 
ORDER BY f_price DESC, f_name ASC;

运行测试结果截图:
在这里插入图片描述

④ 在fruits表中,查询f_name中包含字母‘g’的记录
源码:

SELECT * FROM fruits WHERE f_name LIKE '%g%';

运行测试结果截图:
在这里插入图片描述

⑤ 查询customers表中c_email不为空的记录的c_id、c_name和c_email字段值
源码:

SELECT c_id, c_name, c_email FROM customers WHERE c_email IS NOT NULL;

运行测试结果截图:
在这里插入图片描述

⑥ 根据s_id对fruits表中的数据进行分组,并显示水果种类大于1的分组信息,效果如下图所示(GROUP_CONCAT函数)
在这里插入图片描述


在这里插入图片描述

源码:

SELECT s_id, GROUP_CONCAT(f_name) AS Names
FROM fruits
GROUP BY s_id
HAVING COUNT(f_id) > 1;

运行测试结果截图:
在这里插入图片描述

2.多表查询
① 查询供应‘a1’的水果供应商提供的其他水果种类
源码:

SELECT DISTINCT f2.f_name 
FROM fruits f1 
JOIN fruits f2 ON f1.s_id = f2.s_id
WHERE f1.f_id = 'a1' AND f2.f_id <> 'a1';

运行测试结果截图:
在这里插入图片描述

② 在orderitems表中查询f_id为c0的订单号,并显示具有该订单号的客户c_id
源码:

SELECT DISTINCT orders.o_num, orders.c_id 
FROM orders 
JOIN orderitems ON orders.o_num = orderitems.o_num
WHERE orderitems.f_id = 'c0';

运行测试结果截图:
在这里插入图片描述

③ 查询客户c_id为10000的所有订单的总价格(客户购买水果所花费的金额),效果类似如下图所示
在这里插入图片描述

源码:

SELECT orders.c_id, SUM(orderitems.quantity * orderitems.item_price) AS 金额
FROM orders 
JOIN orderitems ON orders.o_num = orderitems.o_num
WHERE orders.c_id = 10000
GROUP BY orders.c_id;

运行测试结果截图:
在这里插入图片描述

④ 查询s_city等于“Tianjin”的供应商,并显示所有该供应商提供的水果的种类,效果如下图所示
在这里插入图片描述

源码:

SELECT suppliers.s_id, GROUP_CONCAT(fruits.f_name) AS fruit_list 
FROM suppliers 
JOIN fruits ON suppliers.s_id = fruits.s_id
WHERE suppliers.s_city = 'Tianjin'
GROUP BY suppliers.s_id;

运行测试结果截图:
在这里插入图片描述

⑤ 查询订单为‘30005’的所有水果供货商的名称
源码:

SELECT DISTINCT suppliers.s_name 
FROM suppliers 
JOIN fruits ON suppliers.s_id = fruits.s_id 
JOIN orderitems ON fruits.f_id = orderitems.f_id
WHERE orderitems.o_num = 30005;

运行测试结果截图:
在这里插入图片描述

⑥ 查询销量最多的水果名称
源码:

SELECT fruits.f_name, SUM(orderitems.quantity) AS total_sold 
FROM orderitems
JOIN fruits ON orderitems.f_id = fruits.f_id
GROUP BY fruits.f_name 
ORDER BY total_sold DESC
LIMIT 1;

运行测试结果截图:
在这里插入图片描述

⑦ 显示购买了’107’号供货商所有水果的用户信息
步骤:先向数据表orders表中插入两条记录(50010,当前时间,10000)和(50008,当前时间,10004),在orderitems表中插入五条记录(50010,1,b5,10,3.6)、(50010,2,b2,5,7.6)、(50010,3,t2,7,3.6)、(50008,1,b1,10,102)、(50008,2,b5,10,3.6);然后再做题
插入源码:

INSERT INTO orders (o_num, o_date, c_id) VALUES 
(50010, NOW(), 10000),  
(50008, NOW(), 10004);

INSERT INTO orderitems (o_num, o_item, f_id, quantity, item_price) VALUES 
(50010, 1, 'b5', 10, 3.6),  
(50010, 2, 'b2', 5, 7.6),   
(50010, 3, 't2', 7, 3.6),  
(50008, 1, 'b1', 10, 102),  
(50008, 2, 'b5', 10, 3.6);

运行测试结果截图:
在这里插入图片描述
在这里插入图片描述

查询源码:

SELECT DISTINCT customers.* 
FROM customers 
JOIN orders ON customers.c_id = orders.c_id
JOIN orderitems ON orders.o_num = orderitems.o_num
JOIN fruits ON orderitems.f_id = fruits.f_id
WHERE fruits.s_id = 107
GROUP BY customers.c_id
HAVING COUNT(DISTINCT fruits.f_id) = (SELECT COUNT(DISTINCT f_id) 
                                       FROM fruits 
                                       WHERE s_id = 107);

运行测试结果截图:
在这里插入图片描述

运行结果为空,即没有用户买了’107’号供货商所有水果。

三、思考题
结合实际应用并分析查找给定表中结构或数据是否存在问题,如何改进?
在第7小题查询购买了’107’号供货商所有水果的用户信息时,发现输出结果为空,影响用户体验。
改进:(1)输出购买’107’号供货商部分水果的用户
代码:

SELECT DISTINCT customers.* 
FROM customers 
JOIN orders ON customers.c_id = orders.c_id
JOIN orderitems ON orders.o_num = orderitems.o_num
JOIN fruits ON orderitems.f_id = fruits.f_id
WHERE fruits.s_id = 107;

运行结果:
在这里插入图片描述

(2)手动插入数据
– 先新增一个用户

INSERT INTO customers (c_id, c_name) VALUES (10005, 'TestUser');

– 新增一个订单

INSERT INTO orders (o_num, o_date, c_id) VALUES (50011, NOW(), 10005);

– 确保 orderitems 里有 107 号供货商的所有水果

INSERT INTO orderitems (o_num, o_item, f_id, quantity, item_price) VALUES 
(50011, 1, 'b5', 5, 3.60),  
(50011, 2, 't4', 3, 3.60);  

运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

插入数据后运行查询即可输出购买了’107’号供货商所有水果的用户信息:
在这里插入图片描述

四、实验小结
1.实验中遇到的问题及解决过程
问题:查询购买了‘107’号供货商所有水果的用户信息时结果为空
解决方案:
方案一:修改查询条件,查询购买了‘107’号供货商部分水果的用户,以提升查询结果的可用性。
方案二:手动插入数据,确保数据库中有用户购买了‘107’号供货商的所有水果,并重新执行查询,成功获取结果。

2.实验中产生的错误及原因分析
错误现象:多表连接查询时,返回的结果不符合预期,或者返回空结果。
原因分析:连接查询时,可能 JOIN 关联字段不匹配,或存在 NULL 值,影响查询结果。

学习感受

通过本次SQL查询实验,我对数据库的查询语句有了更深入的理解和掌握。尤其是在进行多表连接查询以及分组统计函数的使用时,我切实感受到了SQL在处理复杂数据关系时的强大能力。

实验中最让我印象深刻的是最后一道题“查询购买了某供货商所有水果的用户”。在实际操作过程中,虽然查询语句逻辑严谨,但由于数据本身不满足查询条件,导致结果为空。这一过程让我意识到,仅仅会写查询语句是不够的,还需要对数据本身有清晰的认知,甚至需要主动构造数据进行验证。这种从“语法正确”到“结果合理”的过渡,是我此次实验中很宝贵的体会。

另外,像GROUP_CONCAT函数的使用也让我眼前一亮,它能将多个值合并为一个字段,对于结果展示非常友好。在以往的学习中,这种细节很容易被忽略,但在实验中使用后让我真正理解了它的作用和优势。

总的来说,这次实验不仅提升了我对SQL查询语法的掌握,更让我认识到在实际应用中如何灵活运用所学知识来解决问题。也让我体会到,数据分析不仅仅是“查出结果”,更是一个逻辑严密、需要不断验证和优化的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2379187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 性能优化入门(一)—— 数据结构优化

1、概述 一款 app 除了要有令人惊叹的功能和令人发指交互之外&#xff0c;在性能上也应该追求丝滑的要求&#xff0c;这样才能更好地提高用户体验&#xff1a; 优化目的性能指标优化的方向更快流畅性启动速度页面显示速度(显示和切换)响应速度更稳定稳定性避免出现 应用崩溃&…

数据库中的锁机制

目录 数据库中的锁机制:原理、分类与实际案例详解 一、数据库锁的核心作用与基本概念 1.1 为什么需要数据库锁? 1.2 锁的分类 二、锁机制的实现与典型场景 2.1 共享锁(Shared Lock) 工作原理 适用场景 代码示例(MySQL) 案例分析 2.2 排他锁(Exclusive Lock) …

【网络入侵检测】基于Suricata源码分析运行模式(Runmode)

【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全&#xff0c;欢迎关注与评论。 1. 概要 &#x1f44b; 在 Suricata 中抽象出线程、线程模块和队列三个概念&#xff1a;线程类似进程&#xff0c;可多线程并行执行操作&#xff1b;监听、解码、检…

Linux常用命令(十四)

目录 vi编辑器命令 1-编辑模式 1&#xff09;准备一个txt文件并且进入vi 2&#xff09;按i进入编辑模式 3&#xff09;按o进入编辑模式 4&#xff09;按a进入编辑模式 ​ 2-底行模式 1&#xff09;退出vim 2&#xff09;撤销上次操作 3&#xff09;设置行号底行模式 4&#xff…

规则联动引擎GoRules初探

背景说明 嵌入式设备随着物联网在生活和生产中不断渗透而渐渐多起来&#xff0c;数据的采集、处理、分析在设备侧的自定义配置越来越重要。一个可通过图形化配置的数据处理过程&#xff0c;对于加速嵌入式设备的功能开发愈发重要。作为一个嵌入式软件从业者&#xff0c;笔者一…

基于OpenCV中的图像拼接方法详解

文章目录 引言一、图像拼接的基本流程二、代码实现详解1. 准备工作2. 特征检测与描述detectAndDescribe 函数详解&#xff08;1&#xff09;函数功能&#xff08;2&#xff09;代码解析&#xff08;3&#xff09;为什么需要这个函数&#xff1f;&#xff08;4&#xff09;输出数…

AI大模型学习二十六、使用 Dify + awesome-digital-human-live2d + ollama + ChatTTS打造数字人

一、说明 数字人&#xff08;Digital Human&#xff09; 是指通过人工智能&#xff08;AI&#xff09;、计算机图形学、语音合成、动作捕捉等技术创建的虚拟人物。它们具备高度拟人化的外观、语言、表情和动作&#xff0c;能够与人类进行交互&#xff0c;甚至承担特定社会角色。…

HTML-3.2 表格的跨行跨列(课表制作实例)

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…

Spring Cloud Sentinel 快速入门与生产实践指南

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言&#xff1a;流量洪峰下的微服务守卫战 &#x1f6e1;️一、Sentinel 核心架构解析1.1 Sentinel 整体架构1.2 核心处理流程 二、快速入门实战2.1 环境搭建全流程…

Android平台GB28181设备接入与功能支持详解

GB28181协议作为中国国家标准&#xff0c;广泛应用于安防、智慧城市和交通监控等领域。大牛直播SDK提供了全面支持GB28181设备接入的技术方案&#xff0c;能够有效帮助开发者实现设备的快速接入与管理。在本文中&#xff0c;我们将深入介绍大牛直播SDK在Android平台上对于GB281…

mvc-ioc实现

IOC 1&#xff09;耦合/依赖 依赖&#xff0c;是谁离不开谁 就比如上诉的Controller层必须依赖于Service层&#xff0c;Service层依赖于Dao 在软件系统中&#xff0c;层与层之间存在依赖。我们称之为耦合 我们系统架构或者设计的一个原则是&#xff…

Windows 11 C:\Windows\Web\Wallpaper

Windows 11 C:\Windows\Web\Wallpaper 纯色壁纸自定义 没一个好看的

Spring Web MVC————入门(3)

今天我们来一个大练习&#xff0c;我们要实现一个登录界面&#xff0c;登录进去了先获取到登录人信息&#xff0c;可以选择计算器和留言板两个功能&#xff0c;另外我们是学后端的&#xff0c;对于前端我们会些基础的就行了&#xff0c;知道ajax怎么用&#xff0c;知道怎么关联…

NC61 两数之和【牛客网】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路3.1 排序双指针3.1 散列 四、参考代码4.1 排序双指针4.2 散列 零、原题链接 NC61 两数之和 一、题目描述 二、测试用例 三、解题思路 3.1 排序双指针 基本思路&#xff1a;   先对序列进行排序&#xff0c;然后…

如何分析动态采样引起的计划不稳定 | OceanBase SQL 调优实践

这篇博客涉及两个知识点&#xff0c;一个是动态采样&#xff0c;另一个是 DAS 执行。 用户的问题和相关结论 我们看看用户在OceanBase 社区论坛发帖中提出的疑问及其所得出的结论。 问题&#xff1a;收集统计信息之前&#xff0c;为什么会出现计划不稳定的情况&#xff1f; …

如何实现RTSP和RTMP低至100-200ms的延迟:直播SDK的技术突破

在实时音视频传输中&#xff0c;低延迟是直播应用的核心技术要求之一。无论是在线教育、远程医疗&#xff0c;还是实时互动直播&#xff0c;延迟过大会影响用户体验&#xff0c;甚至导致应用无法正常使用。大牛直播SDK&#xff08;SmartMediaKit&#xff09;在RTSP和RTMP播放器…

symfonos: 2靶场

symfonos: 2 来自 <https://www.vulnhub.com/entry/symfonos-2,331/> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.253 3&…

【图像生成大模型】Step-Video-T2V:下一代文本到视频生成技术

Step-Video-T2V&#xff1a;下一代文本到视频生成技术 引言Step-Video-T2V 项目概述核心技术1. 视频变分自编码器&#xff08;Video-VAE&#xff09;2. 3D 全注意力扩散 Transformer&#xff08;DiT w/ 3D Full Attention&#xff09;3. 视频直接偏好优化&#xff08;Video-DPO…

深度学习推理引擎---ONNX Runtime

一、基础概念 1. 什么是ONNX Runtime&#xff1f; 定位&#xff1a;由微软开发的跨平台推理引擎&#xff0c;专为优化ONNX&#xff08;Open Neural Network Exchange&#xff09;模型的推理性能设计。目标&#xff1a;提供高效、可扩展的推理能力&#xff0c;支持从云到边缘的…

VueUse/Core:提升Vue开发效率的实用工具库

文章目录 引言什么是VueUse/Core&#xff1f;为什么选择VueUse/Core&#xff1f;核心功能详解1. 状态管理2. 元素操作3. 实用工具函数4. 浏览器API封装5. 传感器相关 实战示例&#xff1a;构建一个拖拽上传组件性能优化技巧与原生实现对比常见问题解答总结 引言 在现代前端开发…