oracle基础知识之表的集合运算

devtools/2025/3/20 4:34:12/

一个查询就是一个集合:查询的结果集一条记录就是一个元素。
集合运算是用来把两个或多个查询的结果集做并、交、查的集合运算,包含集合运算的查询称为复合查询。*
Select 基本语法如下:
SELECT
column_1,
column_2,

FROM
table_name
WHERE
search_condition
ORDER BY
column_1,
column_2;

2.常用集合运算方式的应用
(1)联合运算: 联合运算实际是:结果集1加上结果集2的纪录。
两个表或多个表数据合并到一起。只有所选出的列数据类型匹配的查询才可以进行逻辑运算。
语法如下:
select 字段列表1 from 表1
UNION
select 字段列表2 from 表2
字段列表1 和字段列表2 数据类型一致,长度可以不一致,字段个数必须一致
在合并多个集合(表)的过程中,去掉表的重复记录。
(2)联合运算:是从每个查询返回包括所有重复的结果。
注意:使用union all会比union的速度快,因为省去了去除重复记录的时间。
语法如下:
select 字段列表1 from 表1
UNION all
select 字段列表2 from 表2
(3)相交运算(intersect),该运算不去重,默认升序。
该运算取两个集合的交集,相交运算返回多个查询中所有相同的行。
语法如下:
select 字段列表1 from 表1
INTERSECT
select 字段列表2 from 表2
(4)MINUS:结果集1中有,结果集2中没有的纪录。
语法如下:
select 字段列表1 from 表1
MINUS
select 字段列表2 from 表2
使用该操作时,注意以下加点:
1.选择的列数必须相同;
2.所选列的数据类型必须有相同的数据类型;
3.列的名称不必相同。
【例1】建立职工表,包括员工编号,姓名,薪水,电话号码。建立职工性别表,包括员工编号,姓名,薪水,电话,性别,然后插入测试数据。
要求: 取两个表的并集,有重复的记录也保留;
取两个表的并集,重复的记录需要去掉;
取两个表的交集;
取两个表的差集。
建表,插入数据,代码如下:
create table SM_EMP
( empid VARCHAR2(30),
name VARCHAR2(30),
salary NUMBER(6,2),
telno CHAR(8)
)
create table SM_EMP_SEX
( empid VARCHAR2(30) not null,
name VARCHAR2(30),
salary NUMBER(6,2),
telno CHAR(8),
sex CHAR(2)
)
INSERT INTO sm_emp VALUES(‘0000000001’,‘张飞飞’,5500,'6678562 ');
INSERT INTO sm_emp VALUES(‘0000000002’,‘关庭’,4500,‘87825626’);
INSERT INTO sm_emp VALUES(‘0000000003’,‘孙海’,6200,‘87783617’);
Commit;

INSERT INTO sm_emp_sex VALUES(‘000000001’,‘张飞飞’,5500,'6678562 ',‘男’);
INSERT INTO sm_emp_sex VALUES(‘000000002’,‘关庭’,4500,‘87825626’,‘女’);
INSERT INTO sm_emp_sex VALUES(‘000000006’,‘王兴悦’,6200,‘87783617’,‘女’);
Commit;
取两个表的并集,有重复的记录保留,代码如下:
select a.empid,a.name,a.salary,a.telno from sm_emp a
union all
select b.empid,b.name ,b.salary,b.telno from sm_emp_sex b
查询结果如图3-11所示:
在这里插入图片描述

图3-11职工表和性别表取并集的查询结果

2.取两个表的并合,重复的记录需要去掉,代码如下:
select a.empid,name from sm_emp a
union
select b.empid,b.name from sm_emp_sex b
查询结果如如图3-12所示:
在这里插入图片描述

图3-12职工表和性别表取并集并去重的查询结果

3.取两个表的交集,代码如下:
select a.empid,name,salary,a.telno from sm_emp a
INTERSECT
select b.empid,b.name ,salary,b.telno from sm_emp_sex b
查询结果如图3-13下:
在这里插入图片描述

图3-13职工表和性别表取并交集的查询结果

4.取两个表的差集,代码如下:
select a.empid,name,salary,a.telno from sm_emp a
MINUS
select b.empid,b.name ,salary,b.telno from sm_emp_sex b
查询结果如图3-14所示:
在这里插入图片描述

图3-14职工表和性别表取差集的查询结果


http://www.ppmy.cn/devtools/168529.html

相关文章

Python基于Django和协同过滤算法实现电影推荐系统功能丰富版

说明:这是一个系统实战项目,如需项目代码可以直接到文章最后关注获取。 项目背景 随着互联网的普及和数字娱乐内容的爆发式增长,用户在海量的电影资源中找到自己感兴趣的影片变得愈发困难。为了提升用户体验并增加用户粘性,我们…

docker和k8s区别详解

一、核心定位对比 维度DockerKubernetes (K8s)引用来源核心功能容器引擎(构建、运行、分发容器)容器集群管理系统(编排、调度、扩展)[1][2][5]抽象层级单机容器化技术跨主机集群管理平台[5][6]技术目标解决应用环境一致性解决大规…

【面试中的分布式定时任务】

定时任务与分布式定时任务框架XXL-JOB详解 一、为什么需要定时任务? 定时任务在业务场景中非常常见,主要用于以下场景: 时间驱动处理: • 整点发送优惠券 • 每天更新收益 • 每天刷新标签数据和人群数据 批量处理数据&#xf…

A SURVEY ON POST-TRAINING OF LARGE LANGUAGE MODELS——大型语言模型的训练后优化综述——第一部分

arXiv 2025 摘要 大型语言模型(LLMs)的出现从根本上改变了自然语言处理,使其在从对话系统到科学研究的各个领域中变得不可或缺。然而,它们的预训练架构在特定情境下经常显示出局限性,包括有限的推理能力、伦理不确定…

docker 安装 nginx 部署Vue前端项目

1 安装 docker 安装docker详细步骤 安装docker报错解决方案 2 安装 nginx 2.1 拉取镜像 拉取1.18.0版本的镜像 docker pull nginx:1.18.0 查看镜像 2.2 创建实例并启动 创建并启动实例 # 随便启动一个nginx实例,只是为了复制出配置 docker run -p 80:80 --nam…

linux环境下快速输出电脑的系统/硬件/显卡/网络/已安装软件等信息

在Linux环境下,可以通过以下命令快速获取系统和硬件信息。最后将这些命令整合成一个脚本(如 sysinfo.sh),一键输出所有信息。 1. 系统信息 # 内核信息 uname -a# 发行版信息 lsb_release -a 2>/dev/null || cat /etc/*release…

【在数轴上找最优位置,使移动距离最短】

L1-4 破碎的心,无法挽回的距离 题目描述: YFffffff 最近在感情上遭受了失败,他的心也破碎成了n块碎片,散落在了数轴上的 n 个位置。 你是一个情感修复师,作为 YFffffff 的好友,你试图将这些破碎的心重新聚集到一个位…

matlab 控制系统GUI设计-PID控制超前滞后控制

1、内容简介 matlab164-控制系统GUI设计-PID控制超前滞后控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略