12.Mysql 多表数据横向合并和纵向合并

news2024/11/27 1:29:19

Mysql 函数参考和扩展:Mysql 常用函数和基础查询、 Mysql 官网

Mysql 语法执行顺序如下,一定要清楚!!!运算符相关,可前往 Mysql 基础语法和执行顺序扩展。

(8) select (9) distinct (11)<columns_name list>
(1) from <left_table>
(3) <join_type> join <right_table>
(2) on <join_condition>
(4) where <where_condition>
(5) group by <group_by columns_name list>
(6) with <rollup>
(7) having <having_condition>
(10) order by <order_by columns_name list>
(12) limit <[offset] rows>
;

横向合并

又称多表联结,是通过不同表中具有相同意义的关键字段,将多个表进行连接。

多表连接的结果通过三个属性决定

  • 方向性:在外连接中写在前边的表为左表,写在后边的表为右表,左右没有多大关系,主要取决于连接方式。
  • 主附关系:主表要出所有的数据范围,附表与主表无匹配项时标记为null,内连接无主附表之分。
  • 对应关系:关键字段中有重复的表为多表,没有重复的表为一表。对应关系有一对一、一对多、多对一。

常见的连接方式有:内连接和外连接(左连接和右连接)。

示例:有两个表 t1和 t2,t1表的key1元素存在多个,t2表中key2元素为唯一,关键连接字段是 t1.key1=t2.key2。

1)内连接[inner] join。按照关键字段合并两个表,返回满足条件匹配的行。

select key1,v1,key2,v2
from t1
inner join t2
on t1.key1 = t2.key2

在这里插入图片描述

2)左连接left join。按照关键字段合并两个表,结果中除了包括满足条件的行外,还包括左表的所有行。

select key1,v1,key2,v2
from t1
left join t2
on t1.key1 = t2.key2

在这里插入图片描述

3)右连接right join。按照关键字段合并两个表,结果中除了包括满足条件的行外,还包括右表的所有行。

select key1,v1,key2,v2
from t1
right join t2
on t1.key1 = t2.key2

在这里插入图片描述

4)左反连接:按照关键字段合并两个表,返回左表有,而右表没有的记录。

select key1,v1,key2,v2
from t1
left join t2
on t1.key1 = t2.key2
where t2.key2 is null

在这里插入图片描述

5)右反连接:按照关键字段合并两个表,返回右表有,而左表没有的记录。

select key1,v1,key2,v2
from t1
right join t2
on t1.key1 = t2.key2
where t1.key1 is null

在这里插入图片描述

6)笛卡尔积:合并两个表,返回的记录数量是两个表的数量乘积,详情如下:

# 方法一
select key1,v1,key2,v2
from t1
join t2;
# 方法二
select key1,v1,key2,v2
from t1,t2;

在这里插入图片描述

其实还有全连接(full join),但是在Mysql中没有,需要通过其他方式实现,这里给大家放到下面的纵向合并讲解。

多表联结横向合并需要特别注意所关联的关键字段,避免多对多情况或者没写关联的关键字段,并且保证维度表关键字段唯一,否则会出现笛卡尔积得到叉乘数据记录。

纵向合并

纵向合并,可以理解为追加或者添加数据记录。将其他数据集合并到主数据集。

注意事项

  1. 两张表必须拥有相同数量的字段
  2. 两张表字段的顺序必须相同
  3. 两张表对应字段的数据类型必须一致

※字段名可以不相同,选取主数据集的字段名

union all:返回多个数据集中的并集,不会去除重复记录。其实就是上面的左反和右反连接合并后的结果。

# 这里将左连接和
select key1,v1,key2,v2
from t1
left join t2
on t1.key1 = t2.key2
where t2.key2 is null
union all
select key1,v1,key2,v2
from t1
right join t2
on t1.key1 = t2.key2
where t1.key1 is null;

在这里插入图片描述

union:返回多个数据集中的并集,并且去除重复记录。下面这个示例其实就类似于Oracle/SQL Server中的full join。

select key1,v1,key2,v2
from t1
left join t2
on t1.key1 = t2.key2
union
select key1,v1,key2,v2
from t1
right join t2
on t1.key1 = t2.key2;

在这里插入图片描述

union 就是将多段功能类似的sql连接,并去掉重复的行,有distinct的功能。
union all 则只是单纯的将多段类似sql连接,将复杂sql按照不同的功能拆分成一小段sql进行拼接,可以有效提高查询效率。

批注

join和union的用法在sql中非常重要,为了减少数据冗余,相同的数据不需要在多个表中重复存储,而应当将其拆分到单独的表中,以便更有效地管理数据,简化维护工作,并且在系统需要扩展时更容易进行水平扩展。因此,除非有特定要求,在实际应用中,尽量将维度表和事实表分开存储,需要时再使用横向合并和纵向合并拼接数据,以避免相关维度表如需调整,则要调整所有表的情况。

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

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

相关文章

oracle 下载java之前版本

登录oracle官网&#xff1a;Oracle | Cloud Applications and Cloud Platform 点击resource 进入该页面 点击这个 出现之前版本

融合科技,升级医疗体验——医院陪诊服务的技术创新

随着科技的迅猛发展&#xff0c;医疗服务领域也在积极借助技术手段提升患者体验。本文将探讨如何利用先进的技术代码&#xff0c;将医院陪诊服务推向新的高度。 1. 医疗预约系统的实现 # 通过Python代码实现医疗预约系统 class MedicalAppointment:def __init__(self, patie…

IntelliJ IDEA使用Eval Reset

文章目录 IntelliJ IDEA使用Eval Reset说明具体操作 IntelliJ IDEA使用Eval Reset 说明 操作系统&#xff1a;windows10 版本&#xff1a;2020.1 IntelliJ IDEA安装可查看&#xff1a;安装教程 具体操作 添加&#xff0c;输入网址 https://plugins.zhile.io然后搜索“IDE E…

Linux设备分类与设备号

文件分为&#xff1a; 1.文件内容&#xff1b;2.文件名&#xff1b;3.元信息&#xff08;时间戳&#xff0c;文件大小等&#xff09; 一、Linux内核对设备的分类 linux的文件种类&#xff1a; -&#xff1a;普通文件 d&#xff1a;目录文件 p&#xff1a;管道文件 s&#x…

【Python】Numpy库近50个常用函数详解和示例,可作为工具手册使用

本文以yolo系列代码为基础&#xff0c;在其中查找用到的numpy函数&#xff0c;包含近50个函数&#xff0c;本文花费多天&#xff0c;三万多字&#xff0c;通过丰富的函数原理和示例对这些函数进行详解。以帮助大家理解和使用。 目录 np.array()运行示例 np.asarray()函数解析运…

Netty03-核心组件NioEventLoopGroup解读

NioEventLoopGroup 可以看到NioEventLoopGroup继承了MultithreadEventExecutorGroup并且实现了EventLoopGroup接口&#xff0c;而这两个类被ExecutorService修饰&#xff0c;所以NioEventLoopGroup实际上是一个线程池&#xff0c;池中的对象其实就是单个的NioEventLoop。 源码…

图的邻接链表储存

喷了一节课 。。。。。。。、。 #include<stdio.h> #include<stdlib.h> #define MAXNUM 20 //每一个顶点的节点结构&#xff08;单链表&#xff09; typedef struct ANode{ int adjvex;//顶点指向的位置 struct ArcNode *next;//指向下一个顶点 …

持续集成交付CICD:使用Maven命令下载Nexus制品

目录 一、实验 1.Maven安装 2.Nexus搭建公共组仓库及Maven全局配置文件 3.使用Maven命令下载Nexus制品 一、实验 1.Maven安装 &#xff08;1&#xff09;CentOS环境安装步骤 tar -xf apache-maven-3.8.6-bin.tar.gz #解压 mv apache-maven-3.8.6 /usr/local/maven #移动…

Gateway和spring-boot-starter-web的恩怨情仇

为什么取这个题目&#xff0c;其实与我踩到的坑有关&#xff0c;说起来这个坑非常神奇&#xff0c;这里面就涉及到Gateway和spring-boot-starter-web底层所依赖的技术不兼容的问题。 一、背景 SpringCloud 版本 ---- Finchley.SR2 SpringBoot 版本 ---- 2.0.6.RELEASE 如果同…

非标设计之气缸的选型三

一、气缸正确安装方式&#xff0c;气缸调试注意事项 气缸安装方式&#xff1a; 气缸正确安装方式&#xff1a; NB(无支架) FB(脚座支架) FR(法兰) FA(前法兰) FB(后法兰) SC(单耳支架) DC(双耳支架) CT(耳轴支架) 气缸的安装形式决定方法&#xff1a;根据负荷运动方向决定气缸…

案例064:基于微信小程序的考研论坛设计

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Navicat 技术指引 | 适用于 GaussDB 分布式的数据迁移工具

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

集简云 x 零售企业丨快速集成有赞商城和微盛企微管家,实现私域运营自动化

客户介绍 某公司是一家知名的饮料厂商&#xff0c;自1998年成立以来&#xff0c;一直致力于研发和生产各种热门饮品&#xff0c;如果汁、碳酸饮料、矿泉水等。因其独特的口感和健康的品质深受消费者的喜爱。企业拥有多个知名品牌&#xff0c;享有极高的品牌知名度和市场份额。该…

无人机自主巡检是什么?如何实现自动巡检?

近年来&#xff0c;随着科技不断演进&#xff0c;无人机自主巡检技术在多个领域取得显著进展。那么&#xff0c;无人机自主巡检到底是什么&#xff1f;它又是如何实现自动化的呢&#xff1f; 一、无人机自主巡检的定义 无人机自主巡检技术是利用无人机对目标对象或区域进行巡检…

初创公司和小型企业的渗透测试

在构建产品和推出多种产品时&#xff0c;安全性处于次要地位&#xff0c;特别是对于每个人都运行多个项目的引导式初创公司而言。 渗透测试的投资回报率不能直接计算&#xff0c;可以根据数据泄露的成本来计算。 由于高预算限制&#xff0c;初创公司领导者可能会放松安全措施…

Springboot+FastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)

场景 若依前后端分离版手把手教你本地搭建环境并运行项目&#xff1a; 若依前后端分离版手把手教你本地搭建环境并运行项目_前后端分离项目本地运行-CSDN博客 在上面搭建SpringBoot项目的基础上&#xff0c;并且在项目中引入fastjson、hutool、lombok等所需依赖后。 系统需…

如何部署自己的服务渲染页面为Pdf文档

前言 相信大家都觉得官方发布的文档生成模块https://docs.mendix.com/appstore/modules/document-generation/很有用&#xff0c;它能把Mendix页面像素级导出到Pdf文件中&#xff0c;这对于归档等业务非常有价值。但部署依赖公有云提供的渲染服务&#xff0c;而中国本土用户对…

el-table 表格多选(后端接口搜索分页)实现已选中的记忆功能。实现表格数据和已选数据(前端分页)动态同步更新。

实现效果&#xff1a;&#xff08;可拉代码下来看&#xff1a;vue-demo: vueDemo&#xff09; 左侧表格为点击查询调用接口查询出来的数据&#xff0c;右侧表格为左侧表格所有选择的数据&#xff0c;由前端实现分页。 两个el-table勾选数据联动更新 实现逻辑&#xff1a; el-…

奇点云2023数智科技大会来了,“双12”直播见!

企业数字化进程深入的同时&#xff0c;也在越来越多的新问题中“越陷越深”&#xff1a; 数据暴涨&#xff0c;作业量和分析维度不同以往&#xff0c;即便加了机器&#xff0c;仍然一查就崩&#xff1b; 终于搞定新增渠道数据的OneID融合&#xff0c;又出现几个渠道要变更&…

华为配置Smart Link主备备份示例

定义 Smart Link&#xff0c;又叫做备份链路。一个Smart Link由两个接口组成&#xff0c;其中一个接口作为另一个的备份。Smart Link常用于双上行组网&#xff0c;提供可靠高效的备份和快速的切换机制。 Monitor Link是一种接口联动方案&#xff0c;它通过监控设备的上行接口…