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语句返回的所有结果。这也不难理解,只有一个结果集,所以只有一种排序方法,不可能分开部分排序。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

latex伪代码一些记录

参考一 参考二 参考三 使用minipage 最终调整好的效果&#xff1a; $ \begin{document} \begin{center} \begin{minipage}{15.92cm} \renewcommand{\thealgorithm}{1} \begin{CJK}{GBK}{song} \begin{algorithm}[H]\caption{ \text{算法1&#xff1a;xxx}}\begin{algorith…

基于SpringBoot和Vue的学生笔记共享平台的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的学生笔记共享平台的设计与实现 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&…

Linux中断管理:(一)中断号的映射

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 中断控制器 Linux 内核支持众多…

TCP通信——端口转发(重点内容)

实现多人群聊 Client(客户端&#xff09;建立通信 package com.zz.tcp.case1;import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner;public class Client {public static void mai…

Java- maven下载jar包,提示找不到,Could not find artifact

1、执行下面命令行 mvn install:install-file -Dfile/home/quangang/桌面/isv-sdk-2.0.jar -DgroupIdcom.jd -DartifactIdisv-sdk -Dversion2.0 -Dpackangjar 2、然后这里要加上jar包

Linux(CentOS 7 )基于git、maven实现springboot自动化部署

前提 1、已安装git、maven、java环境 不清楚的可以看另一篇文章&#xff1a; https://blog.csdn.net/weixin_44646763/article/details/137041469 2、已为项目设置远程 git 仓库 origin (可以通过&#xff1a;git remote add origin https://github.com/xxx/xxx.git设置) 创…

MCRNet:用于乳腺超声成像语义分割的多级上下文细化网络

MCRNet&#xff1a;用于乳腺超声成像语义分割的多级上下文细化网络 摘要引言方法 MCRNet_ Multi-level context refinement network for semantic segmentation in breast ultrasound imaging 摘要 由于对比度差、目标边界模糊和大量阴影的不利影响&#xff0c;乳腺超声成像中…

基于ssm校园教务系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对校园教务信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

数据结构——优先级队列及多服务台模拟系统的实现

一、优先级队列的定义和存储 优先级队列定义&#xff1a;优先级高的元素在队头&#xff0c;优先级低的元素在队尾 基于普通线性表实现优先级队列&#xff0c;入队和出队中必有一个时间复杂度O(n),基于二叉树结构实现优先级队列&#xff0c;能够让入队和出队时间复杂度都为O(log…

WPF碎片

1、Style作为资源可放在控件自身资源下&#xff0c;也可以放在上级控件下如Window.Resources甚至Application.Resources下&#xff0c;但第二种方法需要加为Style添加key并通过Style"{StaticResource xxx}类似方式调用&#xff0c;而前者控件直接默认使用&#xff1b; 方法…

printf()对浮点数的四舍五入是有问题的!!!

一、问题描述 4.5四舍五入应该是5&#xff0c;8.5四舍五入应该是9 但是printf()函数以".f"和.lf打印&#xff0c;得到的却是4和8 二、问题演示 1、代码 #include<stdio.h> int main() {float f4.5;double d8.5;printf("%.f\n",f);printf("…

C语言实现猜数字游戏(有提示,限制次数版)

这次的猜数字游戏我添加了新的功能&#xff1a;为玩家添加了提示&#xff0c;以及输入数字的限制次数。 首先&#xff0c;我们的猜数字游戏需要一个菜单&#xff0c;来让玩家可以选择玩游戏还是退出游戏&#xff0c;所以我们需要开始就打印一个菜单&#xff1a; int main() {…

Linux之进程间通信

1.进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件&#xff…

谷歌商店如何绑定银行卡!通过支付宝!

完整操作视频在B站&#xff1a; https://www.bilibili.com/video/BV1zt421g7pa/?spm_id_from333.337.search-card.all.click&vd_sourceb5a2563a2e562c5165936c011dcfd0a5 谷歌商店怎么支付&#xff01; 谷歌商店主要用来购买游戏和支付app的应用&#xff0c;由于都是采…

蓝桥杯省赛刷题——题目 2656:刷题统计

刷题统计OJ链接&#xff1a;蓝桥杯2022年第十三届省赛真题-刷题统计 - C语言网 (dotcpp.com) 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目&#xff0c;周六和周日每天做 b 道题目。请你帮小明计算&#xff0c;按照计划他将在第几…

P6学习:Oracle Primavera P6 OBS/责任人解析

前言 Primavera P6 EPPM 责任人用于管理 P6 企业项目组合管理 (EPPM) 系统中的项目所有权和权限。 Primavera P6 EPPM 中的所有项目都至少围绕三个结构进行组织&#xff1a;称为企业项目结构 (EPS) 的用于组织项目的结构、称为工作分解结构 (WBS) 的用于组织项目内活动的结构…

一篇讲明白 Hadoop 生态的三大部件

文章目录 每日一句正能量前言01 HDFS02 Yarn03 Hive04 HBase05 Spark及Spark Streaming关于作者推荐理由后记赠书活动 每日一句正能量 黎明时怀着飞扬的心醒来&#xff0c;致谢爱的又一天&#xff0c;正午时沉醉于爱的狂喜中休憩&#xff0c;黄昏时带着感恩归家&#xff0c;然后…

ALPHA开发板上PHY网络芯片LAN8720:常用的几个寄存器功能

一. 简介 正点原子的开发板 ALPHA开发板&#xff0c;有线网络硬件方案所使用的也是最常用的一种方案&#xff0c;IMX6ULL芯片内部是自带 MAC网络芯片的&#xff0c;所以&#xff0c;也就是采用 "SOC内部集成网络MAC外设 PHY网络芯片方案"。 前面一篇文章简单了解了…

【python从入门到精通】-- 第三战:输入输出 运算符

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…

Android动画(一):视图动画

文章概览 1 Android动画概述1.1 动画的分类1.2 视图动画与属性动画的区别 2 视图动画View Animation2.1 补间动画Tween Animation2.1.1 XML中用标签实现补间动画2.1.2 代码实现补间动画 2.2 逐帧动画Frame Animation2.2.1 XML实现逐帧动画2.2.2 代码实现逐帧动画 本系列将介绍以…