Oracle 组合查询

SQL外连接之交集、并集、差集查询 阅读详情

组合查询,顾名思义就是组合两个或者多个表,进行复杂的查询。组合查询有点类似高一的数学:集合。故又分为:全集,子集,并集,交集。

先预览将用到的表:

表_1:

SQL> SELECT * FROM EMPCHK;
 
EMP_ID    EMP_NAME             EMP_ST_ADDR                    EMP_ZIP EMP_ADDR             EMP_CITY             EMP_PHONE   EMP_SALRAY
--------- -------------------- ------------------------------ ------- -------------------- -------------------- ----------- ----------
100000    ZOU QI LEI           BAN TIAN BULONG STREET         518000  YANG MEI VILLAGE     SHEN ZHEN            123456789         3500
100001    CAI FANG JIE         BAN TIAN BULONG STREET         518000  YANG MEI VILLAGE     SHEN ZHEN            18218429577 
100002    LU JING HUAN         FAN YU SESSION                 430060  YANG MEI VILLAGE     GUANG ZHOU           1397165903  
100003    WU JING XIN          HU BEI DIER SHIFAN XUEYUAN     430060  MING ZHU YUAN        WU HAN               187****235  
100004    LI WEI               QING SHAN GANG DU HUA YUAN     430060  XIAO QU              WU HAN               197****436  

表_2:

SQL> SELECT * FROM EMPCHKTMP;
 
EMP_ID    EMP_NAME             EMP_ST_ADDR                    EMP_ZIP EMP_ADDR             EMP_CITY             EMP_PHONE   EMP_SALRAY
--------- -------------------- ------------------------------ ------- -------------------- -------------------- ----------- ----------
100001    CAI FANG JIE         BAN TIAN BULONG STREET         518000  YANG MEI VILLAGE     SHEN ZHEN            18218429577 
100003    WU JING XIN          HU BEI DIER SHIFAN XUEYUAN     430060  MING ZHU YUAN        SHEN ZHEN            187****235  
100005    DING LING            HAN KOU TAI BEI LU             430060  TIAN MEN DUN NEARBY  WU HAN               137***4256        2000 


 

UNION ALL : 顾名思义是取全集。例如:

SQL> SELECT EMP_ADDR FROM EMPCHK UNION ALL SELECT EMP_ST_ADDR FROM EMPCHKTMP ORDER BY EMP_ADDR ;
 
EMP_ADDR
------------------------------
BAN TIAN BULONG STREET
HAN KOU TAI BEI LU
HU BEI DIER SHIFAN XUEYUAN
MING ZHU YUAN
XIAO QU
YANG MEI VILLAGE
YANG MEI VILLAGE
YANG MEI VILLAGE
 
8 rows selected
可以看到在显示方式上是以EMP_ADDR作为列项,这也是为何ORDER BY EMP_ADDR 而不是 EMP_ST_ADDR, 而且在查询返回的结果中包含了EMP_ADDR 和EMP_ST_ADDR所有的表项.

 

UNION: 顾名思义是取并集,切不包含重复的表项,例如:

SQL> SELECT EMP_ST_ADDR FROM EMPCHK UNION SELECT EMP_ADDR FROM EMPCHKTMP ORDER BY EMP_ST_ADDR ;
 
EMP_ST_ADDR
------------------------------
BAN TIAN BULONG STREET
FAN YU SESSION
HU BEI DIER SHIFAN XUEYUAN
MING ZHU YUAN
QING SHAN GANG DU HUA YUAN
TIAN MEN DUN NEARBY
YANG MEI VILLAGE
 
7 rows selected
可以看到在显示方式上是以EMP_ST_ADDR作为表项,这也是为何ORDER BY EMP_ST_ADDR的原因。即:在显示时,永远用第一个SELECT 后边的查询字段作为列表项。

可以看到UNION组合查询时只返回了一个YANG MEI VILLAGE。即取两个表内容不重复的选项,而且忽略同一表中重复的表项。




INTERSECT:顾名思义是取交集,即取两个表或多个表中内容相同的表项。例如:

SQL> SELECT EMP_ST_ADDR FROM EMPCHK INTERSECT SELECT EMP_ST_ADDR FROM EMPCHKTMP ;
 
EMP_ST_ADDR
------------------------------
BAN TIAN BULONG STREET
HU BEI DIER SHIFAN XUEYUAN


MINUS: 顾名思义取子集,即第一个表有而第二个表没有的表项.例如:

SQL> SELECT EMP_ST_ADDR FROM EMPCHK MINUS SELECT EMP_ST_ADDR FROM EMPCHKTMP;
 
EMP_ST_ADDR
------------------------------
FAN YU SESSION
QING SHAN GANG DU HUA YUAN
可以看到字段:
FAN YU SESSION
QING SHAN GANG DU HUA YUAN
在第二个表:EMPCHKTMP中是没有的。


总结:UNION ALL 取全集,UNION 取并集(除去重复项),INTERSECT 取交集,MINUS 取子集。。且各个查询字段即SELECT后面的字段必须是同一类型,且数量要相等..


下面加入第三个查询表:EMPCHKSUB,预览:

SQL> SELECT * FROM EMPCHKSUB;
 
EMP_ID    EMP_NAME        EMP_PHONE   EMP_SALRAY
--------- --------------- ----------- ----------
100001    CAI FANG JIE    18218429577 
100002    LU JING HUAN    1397165903  
100003    WU JING XIN     187****235  
100004    LI WEI          197****436  

组合查询可以组合两个或者多个表,例如下面根据名字字段进行查询:

SQL> SELECT EMP_NAME FROM EMPCHK
  2  UNION ALL SELECT EMP_NAME FROM EMPCHKTMP
  3  UNION ALL  SELECT EMP_NAME FROM EMPCHKSUB
  4  ORDER BY EMP_NAME ;
 
EMP_NAME
--------------------
CAI FANG JIE
CAI FANG JIE
CAI FANG JIE
DING LING
LI WEI
LI WEI
LU JING HUAN
LU JING HUAN
WU JING XIN
WU JING XIN
WU JING XIN
ZOU QI LEI
 
12 rows selected
返回了三个表中所有的名字字段。


再比如用MINUS进行组合查询,返回TAB_1 - TAB_2 - TAB_3的集合。:

SQL> SELECT EMP_NAME FROM EMPCHK
  2  MINUS SELECT EMP_NAME FROM EMPCHKTMP
  3  MINUS SELECT EMP_NAME FROM EMPCHKSUB
  4  ORDER BY EMP_NAME ;
 
EMP_NAME
--------------------
ZOU QI LEI
可以看到名字字段ZOU QI  LEI 只存在于EMPCHK 中  且不存在于EMPCHKTMP和EMPCHKSUB两个表中。 



























从零构建安全通信:mbedtls与ECDSA在嵌入式系统中的实战指南 本文详细介绍了如何在嵌入式系统中使用mbedtls和ECDSA实现安全通信,重点探讨了ECDSA相比RSA的优势、mbedtls的模块化裁剪策略、密钥安全存储方案以及完整的签名验签流程。通过实战案例和优化技巧,帮助开发者在资源受限环境下构建高效可靠的安全通信系统。 阅读详情

相关推荐

Android开发者必看:5分钟搞定MQTT客户端连接EMQX服务器(附完整代码)

本文为Android开发者提供了一份快速实现MQTT客户端连接EMQX服务器的实战指南。通过引入Eclipse Paho SDK,详细讲解了从项目配置、权限申请到核心连接、主题订阅与消息发布的完整流程,并附有即拿即用的Kotlin代码,帮助开发者在物联网应用中高效集成轻量级实时通信功能。

weixin_29228781的博客 271

sql求交集与差集

日常工作中,针对两个表A,B,求A与B表中同一个字段的交集与差集是常见需求,下面我们来总结一下求交集与差集的方法。假设现在有两张表A,B,A,B表中均有一个字段为id,现在我们想求A与B中都存在的id有多少个(去重),在A中但不在B中的id有多少个。

bitcarmanlee的博客 1万+

随机化策略——随机变量rand、约束constraint、权重dist、随机数产生示例

文章目录一、随机变量类型1.1.rand随机变量1.2.randc随机变量二、随机化约束2.1.constraint指定约束范围2.1.1.关系操作符约束(>、<、=、>=、<=)2.1.2.范围操作符约束(inside)2.1.3.权重分布约束(dist)2.1.4.条件约束(if-else; ->)三、启动随机化——randomize( )函数四、关闭或打开随机变...

Mr.翟的博客 2万+

SQL并集、交集、差集使用

SQL语句实现数据的并集(union)、交集(intersect)、差集(except)。

qq_25775675的博客 6220

西门子S7-200 SMART PLC控制伺服电机

以下是使用西门子S7-200 SMART PLC控制伺服电机的详细程序框架和配置说明,涵盖硬件接线、PLC配置和基本运动控制逻辑。具体实现需根据伺服电机型号(如松下、三菱、台达等)调整参数。通过以上步骤,可实现伺服电机的基础位置控制。实际应用需根据设备机械参数和伺服驱动器手册调整细节。建议在调试时逐步测试脉冲输出和方向信号是否正常。

CHUXUEZHE8210的博客 6425

ILI9488 TFT屏驱动与触摸协同开发指南

TFT-LCD显示模块是嵌入式人机交互系统的核心外设,其工作原理依赖于专用显示控制器(如ILI9488)对GRAM显存的精确读写,并通过SPI等串行总线接收指令与图像数据。理解RGB接口时序、寄存器初始化流程及DC/CS信号控制逻辑,是实现稳定显示的基础技术前提;而四线电阻式触摸功能则需配合XPT2046类ADC控制器,通过独立SPI或模拟时序完成坐标采集。该方案兼顾低功耗、高集成与工程可移植性,广泛应用于工业HMI、仪器仪表及STM32F407等MCU平台的教学与产品开发。本文围绕3.5英寸320×480

weixin_33814090的博客 149

SQL高级技巧:高效获取两表交集数据的三种方法(JOIN、IN、EXISTS)

特性/方法JOININEXISTS适用场景多表关联查询,需要合并数据简单的存在性检查,子查询结果集不大存在性检查,尤其适合大数据集性能中等,取决于连接条件和索引差,特别是在子查询结果集较大时好,尤其是大数据集时语法复杂度中等简单中等灵活性高,支持多种连接类型低,主要用于等值比较高,支持复杂条件。

实践出真知 1683

SPSS实战:5步搞定多指标联合诊断的ROC曲线分析(附Logistic回归教程)

本文详细介绍了如何使用SPSS软件进行多指标联合诊断的ROC曲线分析。通过5个实战步骤,从数据准备、二元Logistic回归建模生成综合预测概率,到绘制并比较单指标与联合模型的ROC曲线,帮助临床研究者有效整合多个诊断指标,提升模型判别能力(AUC),实现诊断效能的优化。

mqtt6iot的博客 1422

SQL取并集 差集 交集

SQL并集(UNIOIN 去重 UNIOIN ALL不去重)交集(Intersect)差集(EXCEPT) MySQL仅支持并集,intersect用join替换,except用not in替换其他要用其他方式替代 1.UNION形成并集 UNION可以对两个或多个结果集进行连接,形成“并集”。 子结果集所有的记录组合在一起形成新的结果集。1、限定条件 要是用UNION来连接结果集,有4个限定条件。 (1)、子结果集要具有相同的结构。 (2)、字结果集的列数必须相同。 (3)、子结果集对应的数据

now 1万+

Discrete Optimization (Coursera) 学习笔记 Week 1 introduction (开个帖子)

Week 1 Introduction 这位教授Pascal Van Hentenryck 真的算是优化领域神级别的人物了吧?截一张Google scholar的图大家感受一下… 居然在Coursera上看到了他开的课:Discrete Optimization。试听了几节后,发现讲得很有激情,而且深入浅出。遂决定花暑假跟完这一门课。 这门课每周花两三个小时介绍基础概念,然后得花十几个小时写作业(coding)… 一开始以为Coursera上的课的作业应该不会太难,然后第一次作业(knapsack)我就被

ZJ_11701的博客 656

【计算机三级-数据库技术】操作题大题(第1套)

从触发器的语法中可知,【1】处应该填写的是执行触发器的表,【2】处应该填写指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。使用FOR或AFTER选顶定义的触发器为后触发器,即只有在引发触发器执行的语句中的操作都已成功执行,并且所有的约束检查也成功完成后,才执行触发器。转换成新的独立的模式,模式的属性由联系本身的属性及两个实体的键构成,主键由两端实体的键组合而成。实体的转换:在从ER图转换为关系模式时,一个实体转换成一个关系模式,实体的属性就是关系模式的属性,实体的键就是关系的主键。

放纵小开爱的博客 1101

Oracle查询排列组合,Oracle SQL排列组合之组合问题

产品部门有一个分析需求,简化后是个组合问题,简单表述如下:表结构 c4列表示状态,c1,c2,c3只要一个不为空,c4就为Y现在想知道每个组合的情况 比如为什么组合(c1、c2)的值是2,因为只有2行(第1行、第3行)数据满足c1、c2都不为空相关测试sql代码如下:SQL> create table t (2 id varchar2(1),3 c1 int,4 c2 int,5 c...

weixin_32246721的博客 878

Vue+OpenLayers6一本通,OpenLayers6完整教程大全,OpenLayers6全知全解,OpenLayers6入门、实战、扩展进阶三合一专栏目录汇总

Gis开发入门,OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts介绍OpenLayers介绍,相比较其他地图引擎有什么优点OpenLayers7.x版本和6.x版本有什么区别,是否需要升级到OpenLayers7版本?OpenLayers6实战:OpenLayers创建自定义控件,以创建一个地图复位控件为例OpenLayers6实战,OpenLayers创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 2199

Oracle 组合查询

大多数SQL查询都包含单独一条SELECT语句,用于从一个或多个表中返回数据。Oracle还允许执行多个多个查询(多条SELECT语句),并返回结果作为单个查询结果集。这些组合查询通常被称为联合或复合查询。一般而言,组合两个对同一个表的查询可以完成与具有多个where子句条件的单个查询所做的相同事情。换句话说,也可以把具有多个where子句的任何select语句指定为一个组合查询。...

weixin_45102678的博客 2976

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

oracle 查询所有组合,Oracle 数据库中 根据 【组合分类】 查询 数据 如何写SQL ?...

Oracle 数据库中 根据 【组合分类】 查询 数据 怎么写SQL ???分类数据:CIDCName-------------1A2B3C主表数据:MIDMNameCIDCODE------------------------1M112M213H124H...

weixin_39876002的博客 172

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

oracle子分区的大小如何查询,Oracle组合分区中怎么查询子分区信息?

Oracle组合分区中怎么查询子分区信息?Oracle组合分区中怎么查询子分区信息?日期:2014-05-17  浏览次数:20748 次Oracle组合分区中如何查询子分区信息???现有一范围列表组合分区如下:我想查询其中列表子分区的信息SQL该如何写?SQL> select * from popcount partition (p9_subp1);select ...

weixin_34017915的博客 701

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

查看组合分区oracle,Oracle组合分区中怎么查询子分区信息?(2)

当前位置:我的异常网» Oracle管理»Oracle组合分区中怎么查询子分区信息?Oracle组合分区中怎么查询子分区信息?(2)www.myexceptions.net网友分享于:2013-02-25浏览:261次insert into popcount values(3, 'ccc ', 'boy ',87);insert into popcount va...

weixin_34138673的博客 209

Oracle的组合条件查询

组合条件查询,以下两种方式都可以: select b.job_id, b.source, b.create_via, b.who_create, b.location_code, b.ref_no from (select rownum r, a.* from (select j.*, c...

Wang Xiang 1358

【 ORACLE vs MySQL 】组合索引在单表查询,关联查询这两种SQL查询结果在ORACLE和MySQL里的区别

具有强大的优化器,一般来说,组合索引在ORACLE里不管是单表还是关联查询,都可以选择optimal的执行计划,只要统计信息等是准确的。的优化器相对来说,要弱不少,很多功能不够健全,单表对于组合索引包含IN的处理貌似没有什么问题,但是JOIN情况下,包含IN LIST组合索引的表是被驱动表,则问题比较严重。

qq_43606536的博客 1710

oracle 查询所有组合,Oracle的组合条件查询

组合条件查询,以下两种方式都可以:select b.job_id,b.source,b.create_via,b.who_create,b.location_code,b.ref_nofrom (select rownum r, a.*from (select j.*, cj.location_code, cj.ref_nofrom nfs_gbl.combine_job j, nfs_gbl.c...

weixin_34229076的博客 787

oracle 条件函数用法,使用Oracle Instr()函数进行多条件组合查询方案

以下的文章主要介绍的是如何正确的使用Oracle Instr()和decode()函数来进行多条件的组合查询,在相关系统中我们经常遇到要处理的多条件组合查询的相关情况,使用instr()和decode()函数的实现方法。下面先说明一下instr()的功能和语法:(函数的语法是从处得到的,相当清晰明了:)InOracle/PLSQL,theinstrfunctionreturnsthe...

weixin_36212400的博客 1168

在ORACLE 中使用Instr和Decode函数处理组合查询

在ORACLE 中使用Instr和Decode函数处理组合查询  系统开发中经常要处理多条件组合查询的情况,使用这两函数可以简化处理。先说下这两函数的语法:在Oracle/PLSQL中, instr 函数返回一个子串出现的位置。Instr函数的语法:instr (string1, string2, [start_position], [nth_appearance]) string1 准备从中查找

fsldg的专栏 1720

oracle 查询所有组合,oracle 列拆分关联查询和查询后的列组合

-----------------------建表-------------------------create table test(id int, plist varchar2(30)) ;create table p(pid int ,pname varchar2(10));-----------------------插入测试数据----------------------------in...

weixin_36108913的博客 196

oracle的拆分组合查询

表:msg_content 表:msg_contact_person 想要得到的效果 要点分析:结果表和表1不同的地方是receiver字段加入了表2的真实姓名 实现方式:    第一步:拆分表1的字段                 SELECT c.msg_content_id AS contentId,

Erik 1434

oracle 查询所有组合,Oracle的拆分组合查询

表:msg_content表:msg_contact_person想要得到的效果要点分析:结果表和表1不同的地方是receiver字段加入了表2的真实姓名实现方式:第一步:拆分表1的字段SELECT c.msg_content_id AS contentId,REGEXP_SUBSTR(receiver, '[^;]+', 1, l) AS bFROM msg_content c,(SELECT ...

weixin_35834213的博客 201

Oracle 查询结果组合

select trim(both '#' from sys_connect_by_path (公司, '#')) as combo from TP_COMPANYSINGLE WHERE LEVEL=50 connect by rowid 其中50是组合的维度

原野 632
上一篇: Oracle命令 外部结合
下一篇: Oracle 表约束
错_对
博客等级 码龄16年 68粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值