oracle、mysql、postgresql数据库的几种表关联方法

简介

在数据开发过程中,常常需要判断几个表直接的数据包含关系,便需要使用到一些特定的关键词进行处理。在数据库中常见的几种关联关系,本文以oracle、mysql、postgresql三种做演示

创建测试数据

oracle

-- 创建表 p1
CREATE TABLE p1 (txt VARCHAR2(100),id VARCHAR2(100)
);-- 插入数据到表 p1
INSERT INTO p1 (txt, id) VALUES ('社会事业项目', '11');
INSERT INTO p1 (txt, id) VALUES ('交通项目', '12'); 
INSERT INTO p1 (txt, id) VALUES ('城建项目', '34'); 
INSERT INTO p1 (txt, id) VALUES ('城建项目', '34');
INSERT INTO p1 (txt, id) VALUES ('工业区项目', '50');
INSERT INTO p1 (txt, id) VALUES ('经济适用房项目', '60');-- 创建表 p2
CREATE TABLE p2 (txt VARCHAR2(100),id VARCHAR2(100)
);-- 插入数据到表 p2
INSERT INTO p2 (txt, id) VALUES ('社会事业项目', '11');
INSERT INTO p2 (txt, id) VALUES ('社会事业项目', '11');
INSERT INTO p2 (txt, id) VALUES ('交通项目', '12');
INSERT INTO p2 (txt, id) VALUES ('农业水利项目', '33');
INSERT INTO p2 (txt, id) VALUES ('城建项目', '34'); 
INSERT INTO p2 (txt, id) VALUES ('经济适用房项目', '60');

postgresql/mysql

-- 创建表 p1
CREATE TABLE p1 (txt VARCHAR(100),id VARCHAR(100)
);-- 插入数据到表 p1
INSERT INTO p1 (txt, id) VALUES ('社会事业项目', '11');
INSERT INTO p1 (txt, id) VALUES ('交通项目', '12'); 
INSERT INTO p1 (txt, id) VALUES ('城建项目', '34'); 
INSERT INTO p1 (txt, id) VALUES ('城建项目', '34');
INSERT INTO p1 (txt, id) VALUES ('工业区项目', '50');
INSERT INTO p1 (txt, id) VALUES ('经济适用房项目', '60');-- 创建表 p2
CREATE TABLE p2 (txt VARCHAR(100),id VARCHAR(100)
);-- 插入数据到表 p2
INSERT INTO p2 (txt, id) VALUES ('社会事业项目', '11');
INSERT INTO p2 (txt, id) VALUES ('社会事业项目', '11');
INSERT INTO p2 (txt, id) VALUES ('交通项目', '12');
INSERT INTO p2 (txt, id) VALUES ('农业水利项目', '33');
INSERT INTO p2 (txt, id) VALUES ('城建项目', '34'); 
INSERT INTO p2 (txt, id) VALUES ('经济适用房项目', '60');

语法

左关联

 

在使用left join语法时,可以看到,如果关联字段并不是唯一字段,数据并不会去重

 重复数据:“社会事业项目” 两条数据行会出现数据重复

右关联

 

 

 

 在使用right join语法时,可以看到,如果关联字段并不是唯一字段,数据并不会去重

 重复数据:“社会事业项目”,“工业区项目”  两条数据行会出现数据重复

 在使用right join语法时,可以看到,如果关联字段并不是唯一字段,数据并不会去重

 重复数据:“社会事业项目” 两条数据行会出现数据重复

内关联(交集)

 

select   *  from p1 inner join p2 on p1.id =p2.id --等效于
select   *  from p1  join p2 on p1.id =p2.id 

 在使用inner join语法时,可以看到,如果关联字段并不是唯一字段,数据并不会去重

 重复数据:“社会事业项目”   两条数据行会出现数据重复

inner是一个可选关键字

 

 

 内链接的去重写法(此时exists 替换成not exists 便是补集结果)

select   *  from p1 where exists (select 1 from p2 where p1.id = p2.id )

--使用此写法不会因为匹配表有重复匹配记录而发生笛卡尔交叉,产生重复项,但是主表的重复项不会进行去重 

 

--oracle、postgresql、mysqlselect  id ,txt  from p1 
intersectselect  id ,txt from p2

--使用此写法不会因为匹配表有重复匹配记录而发生笛卡尔交叉,产生重复项,但是主表的重复项也会进行去重,此写法适用于mysql、postgresql、oracle  

 

补集

此时再加入一条数据,查看不同语法下的去重效果

对p1表增加一条测试数据


INSERT INTO p1 (txt, id) VALUES ('工业区项目', '50');

 

此时p1表的数据状态 

 补集可以使用上文提到的eixsts 写法

select   *  from p1 where not exists (select 1 from p2 where p1.id = p2.id )

 

 可以使用minus

--oracle select  id ,txt  from p1 minus select  id ,txt from p2--postgresql,mysqlselect  id ,txt  from p1 except select  id ,txt from p2

使用exits 不会对主表的重复数据进行去重,使用minus 会对结果进行去重后再展示。

并集

 并集主要使用union  、union all 的语法,两者语法的区别主要在于对结果的去重处理 

--oracle/postgresql/mysql 
--结果去重
select  id ,txt  from p1 
unionselect  id ,txt from p2
--结果不去重select  id ,txt  from p1 
union  allselect  id ,txt from p2

union  结果去重效果

union all结果不去重效果

 

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

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

相关文章

当你在 Tubi 是一位 Tech Lead

在过去,我们邀请了 Tubi 技术团队的许多资深工程师,听他们分享了作为资深工程师的一些故事。今天,我们将镜头转向那些在 Tubi 担任 Tech Lead 的工程师,他们选择了在独立开发之外,承担一定的技术管理工作: …

SAP PP cs62 提示 输入更改号 - BOM 有历史需求

以上是业务操作人员的 账户 但是IT aLL 这边是warning 不是error 遂去查OSS suim 找 C_STUE_NOH权限对象 赋予权限后 解决了

XXL-Job分布式任务调度框架-单机模式和分片模式执行任务4

一 调度模式分类 1.1 调度模式 1.单个任务:一个任务实例便可完成 a)单机单任务:单机模式下任何路由模式都只有一个实例执行 b)集群单任务:由路由策略(广播模式除外)选择其中一个实例完成 2.集群部署:每个实例都同时执行一部分…

【c++源码】老飞飞源码完整v15源码(包含数据库前端后端源文件)

老飞飞源码完整v15源码(包含数据库前端后端源文件)整套程序未加密,资源开放。对于研究游戏流程开发非常有帮助,程序仅供参考学习游戏开发流程。以及框架内容。 测试环境搭建 Visual Studio 2013 SQL Server 2008r Windows 10 和 1…

有趣的 scanf()

限制接收内容 这里的意思是直接收a、b、c作为ch的内容,遇到其它字符放入缓冲区中。 【scanf("%[...]",ch);只接收[]中的内容作为字符串的内容,将其它的内容放入缓冲区中】 这里将aaa后面的h放入缓冲区,但是没有抛弃掉,故而无法接收…

unity 实现拖动ui填空,并判断对错

参考:https://ask.csdn.net/questions/7971448 根据自己的需求修改为如下代码 使用过程中,出现拖动ui位置错误的情况,修改为使用 localPosition 但是吸附到指定位置却需要用的position public class DragAndDrop : MonoBehaviour, IBeginDr…

如何使用C/C++刷新在终端上已经打印的内容

写本文的起源是因为在安装一些工具的时候,发现在终端上并行安装的情况下,显示安装信息是会修改之前已经打印出来的内容,这是怎么做到的呢?抱着对这个问题的好奇我进行了一些探索。 终端是如何运行的 首先是最关键的问题&#xf…

算法通过村第十四关-堆|青铜笔记|堆结构

文章目录 前言堆的概念和特征堆的构成过程插入操作删除操作总结 前言 若执于空,空亦为障。 --彼得马西森《雪豹》 堆结构是一种非常重要的基础数据结构,也是算法的重要内容,很多题目甚至只能通过用堆来进行,所以我们必须明确什么类…

android 与 flutter 之间的通信

文章目录 前言集成 flutter 混合开发android 与 flutter 之间的通信总结 一、前言 因为flutter 具有跨平台的属性,既可以在android上跑,也能在ios 上跑,所以为了节约开发的成本,减少人力,势必就会用到它。然而已有的…

Matlab地理信息绘图—数据诊断

文章目录 数据诊断分析(均值方差)Matlab代码实现结果展示 数据诊断分析(均值方差) 均值方差检测是一种简单但有效的异常检测方法,主要基于样本的均值和方差的统计信息。该方法的核心思想是假设正常的样本点应该聚集在…

CNN-generated images are surprisingly easy to spot... for now

CNN-generated images are surprisingly easy to spot… for now----《目前CNN生成的图像非常容易被发现》 背景: 研究者们发现,仅仅对一种由CNN模型生成的图像进行训练的分类器,也可以检测许多其他模型生成的结果。由此提出这样的观点&#…

C语言中的自定义类型详解(结构体 + 枚举 + 联合(共用体))

文章目录 1. 结构体1.1 结构体的声明1.2 结构体成员的访问1.3 匿名结构体1.4 结构体的自引用1.5 结构体内存对齐(计算结构体的大小)1.6 结构体传参1.6.1 传值传递1.6.2 传址传递(使用指针) 2. 位段2.1 什么是位段?2.2 …

铅华洗尽,粉黛不施,人工智能AI基于ProPainter技术去除图片以及视频水印(Python3.10)

视频以及图片修复技术是一项具有挑战性的AI视觉任务,它涉及在视频或者图片序列中填补缺失或损坏的区域,同时保持空间和时间的连贯性。该技术在视频补全、对象移除、视频恢复等领域有广泛应用。近年来,两种突出的方案在视频修复中崭露头角&…

miRNA测序数据生信分析——第四讲,未知物种的生信分析实例

miRNA测序数据生信分析——第四讲,未知物种的生信分析实例 miRNA测序数据生信分析——第四讲,未知物种的生信分析实例1. 下载测序数据2. 原始数据质控——软件fastqc3. 注释tRNA和rRNA,使用Rfam数据库——软件blast,Rfam_statisti…

监控系列(六)prometheus监控DMHS操作步骤

一、监控的操作逻辑 给操作系统安装expect命令expect脚本执行dmhs_console脚本执行 cpt / exec 命令用脚本进行过滤字符串过滤dm_export读取脚本与当前日期作比较,然后返回差值 二、安装步骤 1. linux中Expect工具的安装及使用方法 https://blog.csdn.net/wangta…

mybatis拦截器源码分析

mybatis拦截器源码分析 拦截器简介 mybatis Plugins 拦截器由于Mybatis对数据库访问与操作进行了深度的封装,让我们应用开发效率大大提高,但是灵活度很差拦截器的作用:深度定制Mybatis的开发抛出一个需求 :获取Mybatis在开发过程中执行的SQL语句(执行什么操作获取那条SQL语句…

ChatGPT,AIGC 制作按年份选择的动态条形图

在数据分析与可视化中,条形图是用来进行对比分析,在正负条形图中都有哪些好处与优点呢? 正负条形图是一种常用的数据可视化方式,它的优点和好处包括: 1.明确展示:正负条形图可以清晰地显示出数据中的正负差异,使读者能直观地看出数据的变化和趋势。 2.直观比较:正负条…

苹果电脑其他内存怎么清理?

苹果电脑中的应用程序大部分是可以通过将其拖拽至废纸篓并倾倒来卸载的。但是部分程序在卸载后仍有残留文件,比如support文件和pref设置等文件的。小编今天介绍下苹果电脑清理内存怎么清理卸载残留以及好用的清理技巧分享。 一、苹果电脑清理内存怎么清理 苹果电脑…

简单实现一个todoList(上移、下移、置顶、置底)

演示 html部分 <!DOCTYPE html> <html> <head><title>表格示例</title> </head> <body><table border"1"><thead><tr><th>更新时间</th><th>操作</th></tr></thead…

thinkphp5.1 获取缓存cache(‘cache_name‘)特别慢,php 7.0 unserialize 特别慢

thinkphp5.1 获取缓存cache(‘cache_name’)特别慢&#xff0c;php 7.0 unserialize 特别慢 场景&#xff1a; 项目中大量使用了缓存&#xff0c;本地运行非常快&#xff0c;二三百毫秒&#xff0c;部署到服务器后 一个表格请求就七八秒&#xff0c;最初猜想是数据库查询慢&am…