MySQL中如何进行多表查询

目录

一、子查询

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.hqwc.cn/news/572002.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【jenkins+cmake+svn管理c++项目】Windows环境安装以及工具配置

一、目标和环境 目标&#xff1a;搭建一个jenkins环境&#xff0c;实现jenkins调用cmake和svn和VS编译c项目&#xff0c;并将生成的库上传svn。 环境&#xff1a;win10虚拟机&#xff08;练习流程用&#xff0c;正式用的话还是放到服务器&#xff09;&#xff0c;VS2017. 二、…

文件编辑命令—vim

1.vim vim 是vi的升级版本.vi 文件名(vi方向键用不了) vim 的官方网站 (welcome home : vim online) 自己也说 vim 是一个程序开发工具而不是文字处理软件。 2.安装vim sudo apt install vim 如果出错了:apt update:刷新软件源; 出现"无法获得锁 之类的"sudo rm 文件…

Linux 的 app :一般到哪里下载 ?(**)

利用 appimagetool 工具对开发好的项目进行打包 &#xff08;***带笔记*&#xff09; https://blog.csdn.net/ken2232/article/details/131313613 1. 首选&#xff0c;直接通过 OS发行版的官网仓库&#xff1a;简单、方便&#xff1b;可能相对最可靠。 如&#xff1a; sudo a…

如何用全身动作捕捉设备升级虚拟仿真实训室?

伴随着“科教强国”、“科教兴国”建设&#xff0c;数字化转型影响着职业教育未来&#xff0c;全身动作捕捉设备搭建数字人实训室&#xff0c;可以有效升级虚拟仿真实训室及相关建设&#xff0c;让实训教学体系更加完善。 以全身动作捕捉设备为主导的虚拟仿真实训室&#xff0…

RHCE-3-远程登录服务

简介 概念 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录linux主机以取得可操作主机接口&#xff08;shell&#xff09;&#xff0c;而登录后的操作感觉就像是坐在系统前面一样 功能: 分享主机的运算能力 服务器类型&#xff1a;有限…

0.96寸OLED屏调试 ----(三)

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、0.96寸OLED显示模块&#xff1b; 备注&#xff1a;专业版、升级版都适用&#xff1b; 经过前面两期的介绍&#xff0c;大家应该对OLED显示模块有了大致的了解&#xff0c;今天先来参插一下调试界面&…

第44期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

稀碎从零算法笔记Day27-LeetCode:螺旋矩阵

题型&#xff1a;矩阵(二维数组)、边界问题 链接&#xff1a;54. 螺旋矩阵 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 很有趣的…

三、阅读器开发--4、阅读器目录、全文搜索功能开发

1、阅读器目录 1.1、实现目录 先实现目录的布局 定义一个蒙版&#xff0c;充满整个屏幕浮在阅读器上方&#xff0c;左侧为目录右侧为背景&#xff0c;目录下方包含一个tab&#xff0c;点击后会切换不同的内容&#xff0c;这里tab是目录、书签&#xff0c;这里可以通过如下的…

优思学院|鱼骨图、因果图可以用Minitab给制吗?

鱼骨图分析法&#xff0c;又被称作因果图或石川图&#xff0c;在职场工作中或者生活上都具有重要的应用价值。对懂得六西格玛的人来说&#xff0c;鱼骨图可以说是最基本的工具。 即使不用什么特别的软件&#xff0c;只需要一个PowerPoint模板&#xff0c;同样可以制作出让老板…

vscode c++环境配置

1.基础软件安装 安装Visual Studio Code. 安装C拓展。点击在vscode界面最左侧的Extensions图标&#xff08;打开快捷键&#xff1a;ctrlshiftX&#xff09;&#xff0c;搜索“C/C”&#xff0c;点击进行安装。 确保已安装gcc. 一般ubuntu系统会预装gcc.在终端窗口中输入如下…

苹果macOS 14.4.1正式发布:修复无法使用外接显示器USB集线器问题

3 月 26 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.4.1 更新&#xff08;内部版本号&#xff1a;23E224&#xff09;&#xff0c;本次更新距离上次发布隔了 18 天。 需要注意的是&#xff0c;因苹果各区域节点服务器配置缓存问题&#xff0c;可能有些地方探测…