解锁数据关联之道:SQL 表连接详解

文章目录

  • 概述
  • 表关系
  • 横向连接
    • 内连接 inner join
    • 左连接 left join
    • 右连接 right join
    • 全连接 full join
    • 交叉连接 cross join
  • 纵向合并
    • UNION ALL
    • UNION

概述

在数据处理、数据分析中常会用到表连接。表连接的作用是将多个表中的数据关联起来,以便在查询过程中获取更全面和准确的信息。。通过表连接,可以更灵活地处理和分析数据库中的数据,提供更全面和准确的查询结果。使用表连接有以下功能:

  • 获取相关数据: 当数据分散在多个表中时,通过表连接可以将这些表中的相关数据关联起来。例如,在一个电子商务系统中,订单信息可能存储在一个表中,而客户信息可能存储在另一个表中。通过表连接,可以将订单表和客户表中的数据关联起来,从而获取包括订单和客户信息的完整记录。
  • 实现数据聚合: 表连接可以用于将多个表中的数据进行聚合计算。通过连接与聚合函数结合使用,可以进行复杂的统计和汇总操作。例如,在销售数据分析中,可以将订单表和产品表连接,并使用聚合函数计算每个产品的销售总额、平均价格等统计指标。
  • 支持复杂的查询条件: 使用表连接可以在查询条件中同时使用多个表的列进行筛选和过滤。这样可以根据多个表的关系和条件进行更精确的查询。例如,可以通过连接客户表和订单表,并根据客户的地理位置和订单的日期范围进行筛选,以获取特定地区在特定时间内的订单数据。
  • 提高查询性能: 通过适当地使用表连接,可以减少数据冗余和重复存储,从而提高查询性能。

表关系

表关系指的是数据库中不同表之间的关联关系。这种关系通常通过表中的共同列(键)建立起来,以便在查询数据时能够在不同表之间建立连接并获取相关信息。表关系通常可以分为以下几种类型:

  • 一对一关系: 两个表中的每个记录在关联字段上都有唯一的对应。这种关系通常用于将不同方面的信息分开存储,以保持数据的规范性和整洁性。
    在这里插入图片描述

  • 一对多关系: 一个表中的记录在关联字段上可以对应多个另一个表中的记录。这种关系常见于主从表的关系,例如一个客户可能有多个订单。

  • 多对一关系: 多个表中的记录在关联字段上对应同一个表中的记录。这种关系通常指向关联字段具有相同值的情况。
    在这里插入图片描述

  • 多对多关系: 两个表之间的记录可以相互关联,并且每个记录在关联字段上可以对应多个另一个表中的记录。为了建立这种关系,通常需要通过第三张关系表来实现。
    在这里插入图片描述

通过合理设计表关系,可以避免数据冗余、确保数据一致性,并且使得数据库的结构更加清晰和易于维护。在进行数据查询时,表关系能够帮助我们获取跨表的相关信息,进行复杂的数据分析和处理操作。

横向连接

数据:
在这里插入图片描述

内连接 inner join

返回左表与右边关键值一致的行(两表的交集)。

select * from t1 inner join  t2 on t1.key1 = t2.key2;

在这里插入图片描述

左连接 left join

返回左表中的所有行,以及右表中与左表匹配的行。

select * from t1 left join  t2 on t1.key1 = t2.key2;

在这里插入图片描述

右连接 right join

返回右表中的所有行,以及左表中与右表匹配的行。

select * from t1 right join  t2 on t1.key1 = t2.key2;

在这里插入图片描述

全连接 full join

返回左右两个表中所有的行,并将它们匹配起来,如果其中一个表中没有匹配的行,则用 NULL 值填充。(两表的并集)

select * from t1 full join  t2 on t1.key1 = t2.key2;

在这里插入图片描述

交叉连接 cross join

交叉连接会返回两个表的笛卡尔积,即左表中的每一行都会与右表中的每一行匹配。

SELECT *
FROM table1
CROSS JOIN table2;

示例:
在这里插入图片描述

纵向合并

纵向合并是为了追加/增加记录。通常情况下,纵向合并需要满足以下条件:

  • 两张表必须拥有相同数量的字段
  • 两张表字段的顺序必须相同
  • 两张表对应字段的数据类型必须一致
  • 字段名可以不相同,选取主数据集的字段名
    在这里插入图片描述

UNION ALL

UNION ALL操作符用于合并结果集时不会去重,即结果集中可能包含重复的行。

SELECT column1, column2
FROM table1
UNION ALL
SELECT column1, column2
FROM table2;

UNION

UNION操作符用于合并结果集时会自动去重,即去除重复的行。

SELECT column1, column2
FROM table1
UNION 
SELECT column1, column2
FROM table2;

在SQL中,UNION和UNION ALL都是用于合并两个或多个SELECT语句的结果集的操作符。它们的主要区别在于对重复行的处理方式。

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

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

相关文章

家政项目day2 需求分析(模拟入职后熟悉业务流程)

目录 1 项目主体介绍1.1 项目背景1.2 运营模式1.3 项目业务流程 2 运营端需求2.1 服务类型管理2.2 服务项目(服务)管理2.3 区域管理2.4 区域服务管理2.5 相关数据库表的管理2.6 设计工程结构2.7 测试接口(接口断点查看业务代码) 1…

【机器学习与大模型】开源大模型和闭源大模型:技术发展与社会责任的平衡点

目录 💡引言✈️✈️一,开源大模型的优势与劣势✈️✈️1.1 优势:✈️✈️1.2 挑战和劣势: 🚀🚀2. 闭源大模型的优势与劣势🚀🚀2.1 优势:🚀🚀2.2 …

【pyspark速成专家】7_SparkSQL编程1

目录 一,RDD,DataFrame和DataSet对比 二,创建DataFrame 本节将介绍SparkSQL编程基本概念和基本用法。 不同于RDD编程的命令式编程范式,SparkSQL编程是一种声明式编程范式,我们可以通过SQL语句或者调用DataFrame的相…

amis 联动效果触发的几种方式

联动效果实现主要俩种方式: 1.表达式实现联动,基于组件内或数据链的变量变化的联动 比如: "source": "/amis/api/mock2/options/level2?name${name} " (必须是这种字符串拼接形式,在data数据映射中表达式不会触发联动) 所有初始化接口链…

Java进阶学习笔记10——子类构造器

子类构造器的特点: 子类的全部构造器,都会先调用父类的构造器,再执行自己。 子类会继承父类的数据,可能还会使用父类的数据。所以,子类初始化之前,一定先要完成父类数据的初始化,原因在于&…

线程生命周期

创建线程的两种方法 1.继承Thread类 2.实现Runnable接口 线程从创建到消亡分为新建、就绪、运行、阻塞、死亡5种状态。 新建状态 创建一个线程就处于新建状态。此时线程对象已经被分配了内存空间,并且私有数据也被初始化,但是该线程还不能运行。 就…

03-02-Vue组件之间的传值

前言 我们接着上一篇文章 03-01-Vue组件的定义和注册 来讲。 下一篇文章 04-Vue:ref获取页面节点–很简单 父组件向子组件传值 我们可以这样理解:Vue实例就是一个父组件,而我们自定义的组件(包括全局组件、私有组件)…

足球走地全自动化操作软件实现过程

本次采用selenium实现自动化操作的流程 打开浏览器录入账号密码等待数据请求(监听)有新数据,进行自动化操作通过homeName搜索,找到对应数据找到对应的类型(让、大小…)找到对应的盘口输入数量提交 附登录…

Python语法(全)

前言: 下面是Python基本的语法,大家耐心观看! 1.基础语法 1.1字面量 字面量:在代码中,被写下来的的固定的值,称之为字面 1.2字符串 字符串(string),又称文本&#xff…

nss做题

[NCTF 2018]签到题 1.f12在index.php中找到flag [NSSCTF 2022 Spring Recruit]ezgame 1.在js源码中就有flag [UUCTF 2022 新生赛]websign 1.打开环境后发现ctrlu和右键,f12都被禁用了。两种方法,第一种:禁用js;第二中提前打开…

vue 表单些某项 v-if 控制后,想在显示时添加验证

效果: 可以为<el-form-item>添加 key 然后prop正常写就行 (key需要唯一值) <el-form-item label"设置" v-if"advanced_setting" key"threshold" prop"threshold"><el-inputv-model"form_Warning.threshold"p…

关于burp的intruder返回包空白问题

记录一下被自己蠢笑的问题 burp返回包为空怎么办&#xff0c;在查询无果后经过多次试验&#xff0c;确实没有效果 看那三个点还以为加载呢&#xff0c;攻击完了怎么一个显示没有 于是…… 鼠标到三个点&#xff0c;往下一拉 哈哈哈哈哈哈哈&#xff0c;真是被自己给蠢到了

[5] CUDA线程调用与存储器架构

CUDA线程调用与存储器架构 前几节简单讲了如何编写CUDA程序&#xff0c;利用GPU的处理能力并行执行多个线程和块。之前所有程序里的线程是相互独立的&#xff0c;没有多个线程之间的通信多是实际应用程序需要中间线程之间的通信&#xff0c;本文将仔细讲解线程调用以及CUDA的分…

@JsonFormat注解出现日期序列化以及反序列化问题(日期比实际日期少一天)

文章目录 前言一、场景如下所示二、问题分析三、JsonFormat注解是什么以下是 JsonFormat 注解的一些常用属性&#xff1a; 四、解决问题解决方式&#xff1a;只需要指定对应的时区就好效果如下&#xff1a; 五、JsonFormat 注解时出现日期问题总结 前言 在一次的偶然机会下发现…

Python基于PyQt6制作GUI界面——按钮

示例对应的制作的 ui文件 界面如下所示。 <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Form</class><widget class"QWidget" name"Form"><property name"geom…

ColossalAI Open-Sora 1.1 项目技术报告 (视频生成)

项目信息 项目地址&#xff1a;https://github.com/hpcaitech/Open-Sora技术报告&#xff1a; Open-Sora 1&#xff1a;https://github.com/hpcaitech/Open-Sora/blob/main/docs/report_01.mdOpen-Sora 1.1&#xff1a;https://github.com/hpcaitech/Open-Sora/blob/main/docs…

swift中json和字典Dict或者数组相互转换,JSONSerialization的强大使用

在Swift中&#xff0c;你可以使用JSONSerialization类将JSON字符串转换为字典。要将 Swift 字典转换为 JSON 字符串&#xff0c;我们可以使用JSONSerialization类的data(withJSONObject:options:)方法。这个方法将字典转换为二进制数据&#xff0c;然后我们可以使用String(data…

Day23:Leetcode:530.二叉搜索树的最小绝对差 + 501.二叉搜索树中的众数 + 236. 二叉树的最近公共祖先

LeetCode&#xff1a;530.二叉搜索树的最小绝对差 问题描述 解决方案&#xff1a; 1.思路 中序遍历 2.代码实现 class Solution {int pre;int ans;public int getMinimumDifference(TreeNode root) {ans Integer.MAX_VALUE;pre -1;dfs(root);return ans;}public void d…

Unity射击游戏开发教程:(26)创建绕圈跑的效果

unity游戏 在本文中,我将介绍如何为敌人创建圆周运动。gif 中显示的确切行为是敌人沿着屏幕向下移动,直到到达某个点,一旦到达该点,它就会绕圈移动。

从浮点数定义到FP8: AI模型中不同的数据类型

背景&#xff1a;AI模型中不同的数据类型对硬件算力和内存的需求是不同的&#xff0c;为了提高模型在硬件平台的吞吐量&#xff0c;减少数据通信带宽需求&#xff0c;往往倾向于将高位宽数据运算转向较低位宽的数据运算。本文通过重新回顾计算机中整数和浮点数的定义&#xff0…