MySQL中如何进行多表查询

news2024/11/17 1:50:04

目录

一、子查询

1.什么是子查询

2.注意事项

二、联结查询

1.什么是联结

2.内部联结(等值联结)

①WHERE语句

②ON语句

3.自联结

4.自然联结

5.外部联结

三、组合查询

1.什么是组合查询

2.UNION规则


*本节涉及概念来源于图灵程序设计丛书,数据库系列——《MySQL必知必会》

MySQL中SELECT字句的顺序以及具体使用 这篇文章主要讲了SELECT语句简单查询的字句顺序,即如何从单个表中检索数据。下面介绍如何从多个表中获取(查询)到所需信息。

先给出两个表,vendors(供应商信息)、products(产品信息,一个供应商可能提供多种产品)

同一供货商的信息都是相同的,每个产品重复存储此信息是多余的;如果供货商信息改变,只需要在vendors表中改变一次即可。vendors中的主键(vend_id)又叫products中的外键。

主键: 一列的值能够唯一区分表中的每个行。

外键: 某个表中的一列,包含另一个表中的主键值。


一、子查询

1.什么是子查询

子查询是嵌套在其他查询中的查询。这样说有点抽象,举个例子——列出所有来自USA供货商提供的产品名称?

通常情况下分为两步:vendors表中获取USA供货商的id  products表中由①的id获取产品名称

使用子查询只需要一条语句:将①放到括号内,与IN操作符结合,子查询总是从内向外处理的。

*虽然子查询一般与IN结合使用,但也可以用于测试等于=、不等于<>等

2.注意事项

①子查询中涉及具有二义性的列名,应该使用完全限定列名(vendors.vend_id),即同时使用表名和列名。这不难理解,一共两个表,不指明是哪个表中的列名,会有歧义的。(示例见下面内部联结)

②使用子查询的时候,应该先测试最内层的查询,确定无错之后,用硬编码数据建立和测试外层查询,确定正确之后再嵌入子查询。


二、联结查询

1.什么是联结

联结用来在一条查询语句中关联表。联结在查询的执行中建立,可以联结多个表返回一组输出。

创建联结,规定要联结的表以及它们如何关联即可。

2.内部联结(等值联结)

例子——输出供应商名字与其提供的产品名字?(分别位于vendors与products表中)

①WHERE语句

其中FROM语句后面跟两个表的名字,WHERE语句使用完全限定表名给出联结条件。(没有联结条件的话会返回笛卡尔积)

一条语句中可以联结的表的数目没有限制,可以通过WHERE...AND...语句联结多个表以及其他过滤条件。

②ON语句

其中FROM语句后面使用INNER JOIN指定两个表的关系,用ON子句给出联结条件。

3.自联结

自联结通常用来替代从相同表中检索数据时使用的子查询语句,有时比处理子查询快得多。也就是这个表自己联结自己。

例子——发现产品id为DTNTR的物品存在问题,想知道生产DTNTR的供货商生产的其他物品是否也存在问题?(均位于表products中,相当于需要查询两次该表)

方法一:使用子查询:①找到生产id为DTNTR的供货商 ②找出该供货商生产的其他产品

方法二:使用自联结

将第一次出现的products命名为表别名p1,第二次命名为p2。通过WHERE语句联结两个表,然后按p2中的prod_id过滤数据。

4.自然联结

书上说:“迄今为止我们建立的每个内部联结都是自然联结,很可能我们永远都不会用到不是自然联结的内部联结”

那等用到了再写吧哈哈哈~

5.外部联结

外部联结:联结包含了那些在相关表中没有关联行的行。

举例——输出所有供货商id以及对应的产品名称?

通过观察表可以注意到,供货商1004、1006并没有提供产品,使用内部联结,输出结果如下:

如果想要输出那些没有产品的供货商,则用外部联结,使用 OUTER JOIN来指定联结类型,用ON子句给出联结条件,在使用的时候要用left(表vendors位于outer join语句的左边)或者right(表products位于outer join语句的右边)来指定包括所有行的表。

(在本例中使用LEFT,即输出表vendors中的所有行)

可以看出,尽管1004、1006并没有提供产品,但外部联结指定输出表vendors中所有的行,即便没有产品的供货商也会检索出来。


三、组合查询

1.什么是组合查询

之前都是单条SELECT语句,MySQL也支持多条查询语句,并将结果作为单个查询结果集返回。

这些组合查询称为并(union)或复合查询,可使用UNION操作符来组合多条SQL查询。使用UNION可以简化复杂的WHERE子句,也会简化从多个表中检索数据的工作。

举例——①输出价格小于等于5的所有产品,②同时也供货商1001、1002提供的所有产品。

例子中组合查询是用相同的表,但UNION是可以应用不同的表的。此例子也可以用多条WHERE子句查询,会更简洁。

当然,如果是更复杂的条件、多个表查询的情况,使用组合查询也许会更简单。

2.UNION规则

①多条语句之间由关键字UNION分隔。

②UNION中的每个查询必须包含相同的列、表达式或聚集函数。

③列数据类型必须兼容:类型不必完全相同,但必须可以隐含转换。

④UNION自动去除重复的行,如果想返回所有匹配行,可以用UNION ALL

⑤在使用UNION组合查询时,只能使用一条ORDER BY语句,必须出现在最后一条SELECT语句之后,用来排序所有SELECT语句返回的所有结果。这也不难理解,只有一个结果集,所以只有一种排序方法,不可能分开部分排序。

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

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

相关文章

成功推出全新生成式AI的四大原则

生成式AI有望从根本上打开一扇新世界机遇的大门&#xff0c;以满足各行各业的客户需求。从提供个性化回复的对话式聊天机器人&#xff0c;到各种应用的代码&#xff0c;再到营销传播的目标内容&#xff0c;生成式AI正在彻底改变企业的运作方式。为竞相提供卓越的客户体验&#…

jupyter lab 自动补全

命令行执行&#xff1a; pip install jupyter-lsp pip install python-lsp-server[all] jupyter lab直接搜索&#xff0c;并安装&#xff0c;重启后生效

使用`scipy.stats.wasserstein_distance`来计算两个一维分布之间的Earth Mover‘s Distance (EMD)距离

在Python中&#xff0c;计算Earth Mover’s Distance (EMD)通常使用scipy库中的scipy.stats.wasserstein_distance函数&#xff0c;该函数计算的是Wasserstein距离&#xff0c;它与EMD非常相似&#xff0c;都是用来衡量两个分布之间的距离。 以下是一个简单的Python程序例子&a…

Web框架开发-BBS(表、登录、注册、文件上传)

一、博客系统表关系 models.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79…

DID分析:上市公司专精特新认定的长期影响(5W+数据)

参照陈金勇&#xff08;2024&#xff09;等人的做法&#xff0c;将上市公司与国家级专精特新小巨人、省级专精特新小巨人、国家级专精特新中小企业、省级专精特新中小企业名单数据进行匹配。包含4类认定标准和年份&#xff0c;并利用四类认定标准分别构建了四类多期DID 一、数据…

进程、线程、协程与虚拟线程(进程相关)

进程、线程、协程与虚拟线程 这一次我们从头&#xff0c;从最大的先开始说&#xff0c;我们从进程开始&#xff0c;因为内容比较多&#xff0c;所以我们分为几个不同的文章来介绍。先从进程&#xff0c;再从线程&#xff0c;最后介绍协程与虚拟线程。 简介 我们以一张操作系…

自动驾驶传感器:惯性导航IMU原理

自动驾驶传感器&#xff1a;惯性导航IMU原理 附赠自动驾驶学习资料和量产经验&#xff1a;链接 组合导航里包含了GNSS卫星导航模块与IMU惯性导航模块&#xff0c;前一篇文章写了GNSS模块&#xff0c;本章写IMU惯导&#xff0c;也是本系列最后一篇文章。 1. 惯性测量单元&…

让 AI 帮你写代码,开发提效神器来了

如今&#xff0c;大量程序员已经习惯在 AI 辅助下进行编程。据调研&#xff0c;AI 编码工具将程序员工作效率提升 50% 以上。 通义灵码是目前国内最受开发者喜爱的 AI 编码助手&#xff0c;可以提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、…

回顾皆草木,唯你是青山~

新中式小飞袖连衣裙 每一件衣裳都是时间的礼赞 是炎炎夏日的一抹清新 传统元素与现代时尚设计相结合 面料舒适透气&#xff0c;裙摆飘逸灵动 宛如林间自由洒脱的小仙子~

【Java】IDEA集成开发工具中英文切换

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章。 这是《Java》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识…

众望所归:FoxPro之后,可视化编程再现新突破,国产力作

许多以前的计算机语言&#xff0c;至今仍然展现出它们强大的生命力。 DOS时代下的FoxPro 然而&#xff0c;曾经风靡一时的FoxPro语言&#xff0c;如今已逐渐淡出人们的视野&#xff0c;令人不禁感慨万分。 每当提及FoxPro&#xff0c;总是有着无尽的话题和回忆。 想当年&am…

65W智能快充—同为科技桌面PDU插座推荐

近10年&#xff0c;移动设备的智能化、功能化已经完全且紧密的融入到我们的基础生活与工作当中。 在常态化的电子设备的应用中&#xff0c;设备的电力续航以及后续的供电充电就尤为重要。 就目前而言&#xff0c;所有消费电子产品中的输入以及充电的接口&#xff0c;usb-c可以…

大模型入门(一)

大模型入门&#xff08;一&#xff09; 一、LLaMa 模型介绍1&#xff09;Pre-normalization2&#xff09;SwiGLU激活函数3&#xff09;RoPE旋转位置编码 二、Alpaca 模型介绍三、Vicuna 模型介绍 大模型入门&#xff08;一&#xff09;—— LLaMa/Alpaca/Vicuna   LLaMa模型是…

每日学习笔记:C++ STL迭代器特性(Iterator Trait)、自定义迭代器

迭代器特性(Iterator Trait) 注意不同的迭代器种类类型之前有继承关系&#xff1a; 为迭代器编写泛型函数 自定义迭代器 实例

几种靠谱的企业大文件安全传输方式,最后一种绝了

在数字化的浪潮中&#xff0c;企业的数据安全传输显得尤为关键。随着远程办公和云技术的普及&#xff0c;企业在保护敏感信息不被外泄方面面临着新的挑战。本文将探讨几种有效的企业数据安全传输方法&#xff0c;并着重阐述其中一种方法如何作为全面的解决方案&#xff0c;提供…

【2024系统架构设计】案例分析- 3 数据库

目录 一 基础知识 二 真题 一 基础知识 1 ORM ORM(Object—Relationl Mapping

探索AI大模型学习的未来之路

文章目录 一、引言二、AI大模型学习的理论基础2.1 深度学习2.2 数据处理 三、AI大模型的训练优化与应用实例3.1 训练优化3.2 AI大模型在特定领域的应用实例 四、AI大模型学习的注意点五、AI大模型学习的未来发展趋势与挑战5.1 发展趋势5.2 所面对的挑战 六、结论 一、引言 随着…

基于springboot+vue实现的民宿管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

07、Lua 流程控制

Lua 流程控制 Lua 流程控制控制结构语句 Lua 流程控制 Lua编程语言流程控制语句通过程序设定一个或多个条件语句来设定。在条件为 true 时执行指定程序代码&#xff0c;在条件为 false 时执行其他指定代码。 以下是典型的流程控制流程图&#xff1a; 控制结构的条件表达式结…

视频智能分析系统TSINGSEE青犀AI算法中台介绍及应用场景

TSINGSEE青犀AI算法中台是一款平台型产品&#xff0c;专注于提供各行业中小场景中部署解决方案。平台具备接入广、性能强、支持跨平台、芯片国产化等特点&#xff0c;可提供丰富的视图接入能力和智能分析能力。平台支持将不同类型、不同协议前端设备&#xff0c;通过不同网络环…