实验三、数据高级查询实验

news2024/12/25 9:33:42

实验名称:实验3 数据高级查询实验

实验目的和要求:

   ·实验目的和要求

掌握SQL嵌套查询和集合查询等各种高级查询的设计方法等。

实验软硬件要求:

计算机、MySQL,Navicat

实验内容、实验过程、所遇问题及其解决方法

  • 实验内容:

针对TPC-H数据库,正确分析用户查询要求,设计各种嵌套查询和集合查询。

  • 实验过程

(1)IN嵌套查询

法1:

  • 代码

SELECT custkey,name

FROM customer

WHERE custkey in(

                      SELECT O.custkey

                      FROM lineitem L,part P,orders O,partsupp PS

                      WHERE

                               O.orderkey=L.orderkey AND

                             L.partkey=PS.partkey AND

                               L.suppkey=PS.suppkey AND

                               PS.partkey=P.partkey AND

                               P.mgfr='赫努巴夫汽车配饰厂' AND

                               P.name='安全带'

       );

  • 结果

法2:

  • 代码

SELECT custkey,name

FROM customer

WHERE custkey in(

                       SELECT O.custkey

                       FROM lineitem L,part P,orders O,customer C

                       WHERE

                                 L.partkey=P.partkey AND

                               

                                O.orderkey=L.orderkey AND

                                O.orderkey=C.custkey AND

                                P.mgfr='赫努巴夫汽车配饰厂' AND

                                P.name='安全带'

         );

  • 结果

(2)单层EXSIT嵌套查询

   ·代码

SELECT custkey,name

FROM customer C

WHERE NOT EXISTS(SELECT O.custkey

                      FROM lineitem L,part P,orders O,partsupp PS

                      WHERE C.custkey=O.custkey AND

                               O.orderkey=L.orderkey AND

                               L.partkey=PS.partkey AND

                               L.suppkey=PS.suppkey AND

                               PS.partkey=P.partkey AND

                               P.mgfr='赫努巴夫汽车配饰厂' AND

                               P.name='安全带'

      );

  • 结果

(3)双层EXISTS嵌套查询

查询至少购买过顾客“王小五”购买过的全部零件的顾客姓名。

  • 代码

SELECT ca.name

FROM customer ca

WHERE not exists

      (select *

         from customer cb,orders ob,lineitem lb

         where cb.custkey=ob.custkey and

         ob.orderkey=lb.orderkey and

         cb.name='王小五' and

         not exists(select *

                       from orders oc,lineitem lc

                        where ca.custkey = oc.custkey and

                        oc.orderkey=lc.orderkey and

                        lb.suppkey=lc.suppkey and

                        lb.partkey=lc.partkey

                        )

)

  • 结果

(4)FROM子句中的嵌套查询

查询订单平均金额超过1000元的顾客中的中国籍顾客信息。

代码

SELECT C.*

FROM Customer C,(SELECT custkey

               FROM Orders

               GROUP BY custkey

               HAVING AVG(totalprice)>1000) B,nation N

   where C.Custkey=B.custkey and

   C.nationkey=N.nationkey and

   N.name='中国';

结果

(5)集合查询(交)

查询至少购买过顾客“ 白鹭谣”和“王小五”度订购过的全部零件的信息。

  ·代码

SELECT P.*

FROM Customer C,Orders O,Lineitem L,Partsupp PS,Part P

WHERE C.custkey=o.custkey and o.orderkey=l.orderkey and

      l.suppkey=ps.suppkey and l.partkey=ps.partkey and

      ps.partkey=p.partkey and c.name='王小五';

INTERSECTion     

SELECT P.*

FROM Customer C,Orders O,Lineitem L,Partsupp PS,Part P

WHERE C.custkey=o.custkey and o.orderkey=l.orderkey and

      l.suppkey=ps.suppkey and l.partkey=ps.partkey and

      ps.partkey=p.partkey and c.name='白鹭谣';

  • 结果

(6)集合查询(并)

查询顾客“王小五”和“白鹭谣”订购的全部零件的信息。

代码

SELECT P.*

FROM Customer C,Orders O,Lineitem L,Partsupp PS,Part P

WHERE C.custkey=o.custkey and o.orderkey=l.orderkey and

      l.suppkey=ps.suppkey and l.partkey=ps.partkey and

      ps.partkey=p.partkey and c.name='白鹭谣';

union      

SELECT P.*

FROM Customer C,Orders O,Lineitem L,Partsupp PS,Part P

WHERE C.custkey=o.custkey and o.orderkey=l.orderkey and

      l.suppkey=ps.suppkey and l.partkey=ps.partkey and

      ps.partkey=p.partkey and c.name='王小五';

  • 结果

(7)集合查询(差)

查询顾客“白鹭谣”订购过“王小五”订购的全部零件的信息。

  • 代码

SELECT P.*

FROM Customer C,Orders O,Lineitem L,Partsupp PS,Part P

WHERE C.custkey=o.custkey and o.orderkey=l.orderkey and

      l.suppkey=ps.suppkey and l.partkey=ps.partkey and

      ps.partkey=p.partkey and c.name='白鹭谣';

except

SELECT P.*

FROM Customer C,Orders O,Lineitem L,Partsupp PS,Part P

WHERE C.custkey=o.custkey and o.orderkey=l.orderkey and

      l.suppkey=ps.suppkey and l.partkey=ps.partkey and

      ps.partkey=p.partkey and c.name='王小五';

  • 结果

  • 遇到的问题与解决的方法

    • 问题1:查询结果字段重复或丢失

解决方法:使用DISTINCT关键字去除重复记录,等关联查询方式避免数据丢失。

    • 问题3:MySQL只支持Union(并集)集合运算,好像也是4.0以后才有的;但是对于交集Intersect、差集Except,就没有实现了
    • 问题4:查询结果数据类型不匹配

解决方法:将查询结果强制转换为所需的数据类型,例如使用CAST或CONVERT函数进行数据类型转换。

    • 查询结果中包含NULL值

解决方法:使用IS NULL或IS NOT NULL操作符筛选出包含或不包含NULL值的结果。可以使用IFNULL函数将NULL值替换为指定的值。

实验总结及心得体会

①多表查询:在实际应用中,一个查询往往需要涉及到多个表。这时可以使用多表查询,将多个表连接起来,实现跨表查询。

②子查询:子查询是将一个查询语句嵌套在另一个查询语句中,以实现更复杂的查询。子查询可以出现在where子句、from子句、select子句中,具体使用可以根据实际情况灵活运用。

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

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

相关文章

Discourse 的用户信息中的 IP 地址显示的是 CloudFlare 的 IP 地址

因为使用了 CloudFlare 的反向地址。 所有 Discourse 获得的用户的 IP 地址其实是 CloudFlare 的服务器地址。 修改 好在 Discourse 已经提供了相关的解决方案。 需要在 Discourse 的配置文件中,添加下面的内容: “templates/cloudflare.template.ym…

分布式系统概念和设计——协调和协定

分布式系统概念和设计 协调和协定 分布式系统中的进程如何协调它们的动作和对共享值达成协议? 算法在分布式系统中的基本目的是:供一组进程来协调它们的动作或对一个或多个值达成协议 避免固定的主-从关系的主要原因是,经常需要系统即使在系统故障的情…

日志文件的轮循(logrotate)

文章目录 日志文件的轮循(logrotate)轮循基本原理轮循的基本配置实际测试logrotate的操作使用案例 自定义日志文件的轮循功能 日志文件的轮循(logrotate) 日志轮循(logrotate)是一种用于管理日志文件的工具,它可以帮助我们自动地对日志文件进…

EasyRecovery Photo16 for windows数据恢复软件免费版下载安装教程

EasyRecovery Photo16 for windows数据恢复软件免费版下载是一款由Kroll Ontrack公司开发的数据恢复软件,其主要功能是恢复已经删除或损坏的图片文件。该软件可用于恢复各种类型的图片文件,包括JPEG、GIF、BMP、PNG等,同时也支持恢复照片文件…

Thematica: 炫彩主题与黑暗奇观的Vue3之旅

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 一、介绍1.1 博客主题和目的1.2 Vue 3简介二、炫彩主题2.1 准备工作2.2 安装必要依赖2.3 创建Vue项目2.4 设置全局样式

AJax和Axios的讲解

目录 Ajax Ajax基本介绍 同步异步 原生Ajax 原生的Ajax使用方式 Axios 基本介绍 Axios的基本使用 发送 get 请求 发送 post 请求 Axios快速入门 请求方法的别名 练习 Ajax Ajax基本介绍 Ajax: 全称Asynchronous JavaScript And XML,异步的JavaScript和XML…

【每日一题/数学模拟题/进位算术】1073. 负二进制数相加

⭐️前面的话⭐️ 本篇文章介绍【1073. 负二进制数相加】题解,算法标签:【数学】,【思维】,【模拟算术】,展示语言c/java。 📒博客主页:未见花闻的博客主页 🎉欢迎关注&#x1f50e…

代码随想录训练营Day38| 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

目录 学习目标 学习内容 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 学习目标 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 学习内容 理论基础 problems/动态规划理论基础.md programmercarl/leetcode-master(代码随…

C++的list使用

list 1.list的介绍和使用1.1. list介绍1.2. list的使用1.2.1 list的构造1.2.2. list iterator的使用1.2.3. list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效 1.list的介绍和使用 1.1. list介绍 list是可以在常数范围内在任意位置进行插入…

chatgpt赋能Python-python2的n次方

Python2中实现n次方的方法 Python是一种非常受欢迎的编程语言,其简单易学的特性吸引了大量的开发者前来学习和使用。在Python2中,实现n次方有多种方法,下面就给大家介绍一些。 方法一:使用运算符 在Python2中,可以使…

不重启Linux修改主机名,以CentOS 7举例

在 Linux 中,可以通过修改主机名配置文件的方式更改主机名,不需要重启机器即可立即生效。 下面介绍一下具体步骤: 1、查看原始主机名 比如我的主机名叫small-black 2、使用命令行修改主机名 2.1 修改主机名 首先,使用以下命…

2023年的深度学习入门指南(14) - 不能只关注模型代码

2023年的深度学习入门指南(14) - 不能只关注模型代码 最近,有一张大模型的发展树非常流行: 这个图是相当不错的,对于加深对于Transformer模型编码器、解码器作用的理解,模型的开源和闭源情况等等都相当有帮助,大家使…

尝试Google Bard并对比OpenAI ChatGPT,一个擅长创造性,一个擅长事实查询?

文章目录 尝试Google Bard并对比OpenAI ChatGPT,一个擅长创造性,一个擅长事实查询?Google Bard 的自我介绍Google Bard 暂时不支持中文Google Bard除了支持英语外,还支持日语Google Bard和OpenAI ChatGPT的对比Google Bard的回答O…

音乐宿主软件排行榜前十名,音乐宿主要买正版吗

随着电子音乐的不断发展,一些电子音乐爱好者开始尝试自己编写电子音乐。而编写电子音乐必不可少的一点就是需要一款非常好用的音乐宿主软件,那么今天我们就来说一说音乐宿主软件排行榜前十名以及音乐宿主软件要买正版吗这两个问题。 一、音乐宿主软件排…

数组【C语言】

目录 一维数组的创建和初始化 数组创建 数组的初始化 一维数组的使用 一维数组在内存中的存储 二维数组的创建与初始化 二维数组的创建 二维数组的初始化 二维数组的使用 二维数组在内存中的存储 数组越界 数组名作为函数参数 数组名 一维数组的创建和初始化 数组…

chatgpt赋能Python-python3_8降级3_6

Python3.8降级3.6,你需要知道的一切 在Python语言的世界中,每一个版本带来了新的变化和功能。但是在某些情况下,汲取早期版本的优点也是很必要的。Python3.8之前的版本当中,Python3.6是广泛使用的版本,因为它包含了许…

t检验是基于t分布的

例:鸢尾花的平均花瓣长度为3.5cm,这种说法正确吗? 可以根据假设检验的步骤,进行解决。 /设置原假设与备择假设: 原假设:μ μ0 3.5cm(说法正确) 备择假设:μ ≠ μ0 ≠…

chatgpt赋能Python-python3_8怎么安装matplotlib

Python3.8怎么安装Matplotlib Matplotlib是一个非常流行的Python可视化库,它可以用来创建各种类型的图形,包括线图、散点图、直方图、饼图和热图等等。在本文中,我们将介绍如何在Python3.8中安装Matplotlib,以及如何使用它来绘制…

chatgpt赋能Python-python3_9_0怎么安装

Python3.9.0的安装指南 Python作为目前世界上使用最广泛的编程语言之一,在数据科学、人工智能、Web开发等领域都有着广泛的应用。而今年10月5日,Python官方发布了最新的稳定版本——Python3.9.0。本文将提供一份简明的Python3.9.0安装指南。 准备工作 …

C++模板类与继承

目录 分类 一、模板类不继承 (1)代码 (2)分析 (3)运行结果 二、模板类继承普通类 (1)代码 (2)分析 (3)运行结果 三、普通类继…