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结果不去重效果
相关文章:
oracle、mysql、postgresql数据库的几种表关联方法
简介 在数据开发过程中,常常需要判断几个表直接的数据包含关系,便需要使用到一些特定的关键词进行处理。在数据库中常见的几种关联关系,本文以oracle、mysql、postgresql三种做演示 创建测试数据 oracle -- 创建表 p1 CREATE TABLE p1 (tx…...
什么是UML UML入门到放弃系列
1.定义 UML-Unified Modeling Language 统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语言。 2.UML的三个级别 《UML精粹》一书中把这三个级别称为概念级、规格说明级和实现级。 2.1 概念级 概念级的图示和源代码之间没有很强的关联。…...
vue3 + element Plus实现表格根据关键字合并行,并实现行的增删改操作
根据关键字合并表格 1.实现初始化表格2.实现添加班级与学生的功能3.添加的弹窗4.删除班级5.删除学生 首先看最终实现的效果 1.实现初始化表格 这里主要用到的是表格的span-method这个方法 <template><div class"main-page"><div class"flex-en…...
c++视觉处理---直方图均衡化
直方图均衡化 直方图均衡化是一种用于增强图像对比度的图像处理技术。它通过重新分布图像的像素值,以使图像的直方图变得更均匀,从而提高图像的视觉质量。在OpenCV中,您可以使用 cv::equalizeHist 函数来执行直方图均衡化。以下是 cv::equal…...
【LeetCode】2.两数相加
目录 1 题目2 答案2.1 我写的(不对)2.2 更正 3 问题 1 题目 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返…...
蜘蛛飞机大战
欢迎来到程序小院 蜘蛛飞机大战 玩法: 点击开始游戏,鼠标移动控制方向,可自由移动飞机打剁掉方飞机下落的子弹并打掉敌方飞机,三次生命,不同关卡不同奖励,快去闯关吧^^。开始游戏https://www.ormcc.com/pl…...
代码混淆界面介绍
代码混淆界面介绍 代码混淆功能包括oc,swift,类和函数设置区域。其他flutter,混合开发的最终都会转未oc活着swift的的二进制,所以没有其他语言的设置。 代码混淆功能分顶部的显示控制区域:显示方式,风险等…...
蓝桥杯每日一题2023.10.9
题目描述 成绩统计 - 蓝桥云课 (lanqiao.cn) 题目分析 学会使用四舍五入函数round #include<bits/stdc.h> using namespace std; int s1, s2; int main() {int n, x;cin >> n;for(int i 1; i < n; i ){cin >> x; if(x > 60)s1 ;if(x > 85)s2 ;…...
HTML5的新增表单元素
HTML5 有以下新的表单元素: <datalist> <keygen> <output> datalist datalist 元素规定输入域的选项列表。 datalist属性规定 form 或 input 域应该拥有自动完成功能。当用户在自动完成域中开始输入时,浏览器应该在该域中显示填写的选项&…...
如何在Firefox中配置HTTP?
在浏览器中配置HTTP是一个常见的需求,它可以让我们轻松访问需要的网站或保护个人隐私。本文将为您详细介绍如何在Firefox浏览器中配置HTTP应用,帮助您实现无缝的HTTP体验。无论您是初次接触HTTP还是有一定经验的用户,本文都能为您提供实用的操…...
Android组件通信——消息机制(二十六)
1. 消息机制 1.1 知识点 (1)掌握Message、Handler、Looper类的使用以及消息的传递; (2)可以通过消息机制动态取得信息; 1.2 具体内容 对于android的消息机制,我们主要要使用Java中线程的一…...
《进化优化》第4章 遗传算法的数学模型
文章目录 4.1 图式理论4.2 马尔可夫链4.3 进化算法的马尔可夫模型的符号4.4 遗传算法的马尔可夫模型4.4.1 选择4.4.2 变异4.4.3 交叉 4.5 遗传算法的动态系统模型4.5.1 选择4.5.2 变异4.5.3 交叉 4.1 图式理论 图式是描述一组个体的位模式,其中用*来表示不在乎的位…...
spring:详解spring MVC
spring MVC SpringMVC是一种基于Java的MVC(Model-View-Controller)Web开发框架,通过将业务逻辑、数据和界面分离,使得开发人员能够更高效地管理和维护代码,提高应用的可扩展性和可维护性。 SpringMVC核心概念 Contr…...
【Leetcode】207.课程表
一、题目 1、题目描述 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 p r e r e q u i s i t e s [ i ] = [ a i , b...
Ubuntu18.04中QT安装下载安装pcl和vtk以及使用过程中踩过的坑
一、先记录一下下载过程中踩过的坑 问题1:QVTKOpenGLNativeWidget和QVTKWidget 之前从来没有接触过QT中显示3D点云方面的知识,了解到可以用pcl,然后在网上各种找pcl下载的相关内容,想要在QT中显示出来,需要用到VTK&a…...
C++学习——对象数组、成员对象与封闭类
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 一、对象数组 对象数组,即数组的每个元素都是某个类的对象。 1、对象数组中的每个元素都需要用构造函数初始化,具体哪些元素用哪些构造函数初始化,…...
解锁机器学习-梯度下降:从技术到实战的全面指南
目录 一、简介什么是梯度下降?为什么梯度下降重要? 二、梯度下降的数学原理代价函数(Cost Function)梯度(Gradient)更新规则代码示例:基础的梯度下降更新规则 三、批量梯度下降(Batc…...
day62:ARMday9,I2c总线通信
作业:按键中断实现LED1、蜂鸣器、风扇 key_in.c: #include "key_in.h"void gpio_init() {//RCC使能//GPIOERCC->MP_AHB4ENSETR | (0x1<<4);//GPIOBRCC->MP_AHB4ENSETR | (0x1<<1);//PE10、PB6、PE9输出模式GPIOE->MODER & ~(0…...
【Python学习笔记】类型/运算/变量/注释
前言 人生苦短,追求生产力,做一只时代风口的猪,应该学python Python语言中,所有的数据都被称之为对象。 1. 对象类型 Python语言中,常用的数据类型有: 整数, 比如 3 小数(也叫浮…...
国内常用源开发环境换源(flutter换源,python换源,Linux换源,npm换源)
flutter换源 使用环境变量:PUB_HOSTED_URL FLUTTER_STORAGE_BASE_URL, upgrade出问题时可能会提示设置FLUTTER_GIT_URL变量。 flutter中国 PUB_HOSTED_URLhttps://pub.flutter-io.cn FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn FLUTTER_GIT_URLhtt…...
HarmonyOS6 半年磨一剑 - RcCheckbox 实战下篇:问卷调查表单与参数使用指南
文章目录前言一、场景:问卷调查表单1.1 需求分析1.2 数据结构设计1.3 表单校验联动1.4 第三题:计数器与数量限制的配合1.5 结果页与状态重置1.6 三道题的样式差异化对比1.7 完整代码二、参数使用频率参考2.1 高频参数(必须掌握)2.…...
Kubernetes与Istio服务网格最佳实践
Kubernetes与Istio服务网格最佳实践 1. Istio服务网格核心概念 1.1 什么是服务网格 服务网格是一种专门用于处理服务间通信的基础设施层,它负责在现代云原生应用的复杂服务拓扑中可靠地传递请求。 1.2 Istio架构组件 控制平面:包含Pilot、Galley、Citade…...
基于Python的线上学习资源智能推荐系统毕设
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于Python的线上学习资源智能推荐系统,以实现个性化学习资源的精准推送。具体而言,研究目的可概括为以下几个方面&am…...
前端 跨域解决方案
一、什么是跨域? 协议、域名、端口 三者有任意一个不一样,就是跨域。 浏览器出于安全考虑,会限制跨域请求,这就是同源策略(Same-Origin Policy)。 举例: https://www.baidu.com协议:…...
Wan2.1 VAE入门:Ubuntu 20.04系统下的保姆级环境配置教程
Wan2.1 VAE入门:Ubuntu 20.04系统下的保姆级环境配置教程 你是不是也对那些能生成逼真图像的AI模型感到好奇,想自己动手试试,却被“环境配置”这道门槛给拦住了?特别是看到需要安装CUDA、cuDNN、PyTorch这些名字,头都…...
从臃肿到轻盈:Win11Debloat如何让你的Windows系统重获新生
从臃肿到轻盈:Win11Debloat如何让你的Windows系统重获新生 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化…...
主流推理引擎选型指南:从ONNX、OpenVINO到TensorRT与ncnn的实战场景解析
1. 主流推理引擎全景概览 第一次接触AI模型部署时,我对着各种推理引擎文档看得一头雾水。直到在真实项目中踩过几次坑才明白,选对推理引擎就像给赛车选轮胎——用错类型再好的引擎也跑不出速度。目前市面上主流的四大推理方案各有绝活:ONNX像…...
反线性学习—— 不是“按顺序学完教材”,是“围绕目标把知识长出来”
反线性学习—— 不是“按顺序学完教材”,是“围绕目标把知识长出来”在传统的学习习惯中,我们往往有一种 “进度条强迫症”:只要书看完了、课听完了、笔记记满了,就觉得自己“学完了”。 但现实往往很残酷:当你合上书本…...
Hive与MySQL集成配置全流程解析
1. Hive与MySQL集成的核心价值 在企业级大数据环境中,Hive作为数据仓库工具经常需要处理PB级数据。但默认的Derby元数据库存在单会话限制和性能瓶颈,这正是MySQL大显身手的地方。我经历过多次生产环境迁移,将元数据从Derby切换到MySQL后&…...
5个维度解决经典游戏兼容性痛点:DxWrapper的兼容性引擎创新价值
5个维度解决经典游戏兼容性痛点:DxWrapper的兼容性引擎创新价值 【免费下载链接】dxwrapper Fixes compatibility issues with older games running on Windows 10 by wrapping DirectX dlls. Also allows loading custom libraries with the file extension .asi i…...

