postgresql-集合运算

news2024/10/6 4:05:45

postgresql-集合运算

  • 简介
  • UNION
  • INTERSECT
  • EXCEPT
  • 分组与排序
  • 集合操作优先级

简介

数据库中的表(table)本质上就是由行(row)组成的集合。因此,PostgreSQL 同样支持集
合论中的集合操作,包括并集(UNION)、交集(INTERSECT)和差集(EXCEPT):

  • UNION 操作符用于将两个查询结果合并成一个结果集,返回出现在第一个查询或者出现
    在第二个查询中的数据
  • INTERSECT 操作符用于返回两个查询结果中的共同部分,即同时出现在第一个查询结
    果和第二个查询结果中的数据
  • EXCEPT 操作符用于返回出现在第一个查询结果中,但不在第二个查询结果中的数据
    这三个操作符的作用如下图所示:
    在这里插入图片描述

UNION

UNION 操作符用于将两个查询结果合并成一个结果集,返回出现在第一个查询或者出现在
第二个查询中的数据:

-- 语法
SELECT column1, column2
 FROM table1
UNION [DISTINCT | ALL]
SELECT col1, col2
 FROM table2;

其中,DISTINCT 表示将合并后的结果集进行去重;ALL 表示保留结果集中的重复记录;如
果省略,默认为 DISTINCT。例如

SELECT * FROM (values(1),(2)) t1(n)
union
SELECT * FROM (values(1),(3)) t2(n);

在这里插入图片描述

SELECT * FROM (values(1),(2)) t1(n)
union all
SELECT * FROM (values(1),(3)) t2(n);

在这里插入图片描述
第一个查询结果中只有一个数字 1,第二个查询结果中保留了重复的数字 1。

INTERSECT

INTERSECT 操作符用于返回两个查询结果中的共同部分,即同时出现在第一个查询结果和
第二个查询结果中的数据:

-- 语法
SELECT column1, column2
 FROM table1
INTERSECT [DISTINCT | ALL]
SELECT col1, col2
 FROM table2;

其中,DISTINCT 表示将合并后的结果集进行去重;ALL 表示保留结果集中的重复记录;如
果省略,默认为 DISTINCT。例如:

select * from (values(1),(2)) t1(n)
intersect
select * from (values(1),(3)) t2(n);

在这里插入图片描述
在这里插入图片描述

select * from (values(1),(1),(2)) t1(n)
intersect all
select * from (values(1),(1),(3)) t2(n);

在这里插入图片描述
第一个查询结果中只有一个数字 1;第二个查询虽然使用了 ALL 选项,结果也只有一个 1;
第三个查询结果中有两个 1。

EXCEPT

EXCEPT 操作符用于返回出现在第一个查询结果中,但不在第二个查询结果中的数据:

select column1, column2
 from table1
except [distinct | all]
select col1, col2
 from table2;

其中,DISTINCT 表示将合并后的结果集进行去重;ALL 表示保留结果集中的重复记录;如
果省略,默认为 DISTINCT。例如:

select * from (values(1),(1),(2)) t1(n)
except
select * from (values(1),(3)) t2(n);

在这里插入图片描述

select * from (values(1),(1),(2)) t1(n)
except all
select * from (values(1),(3)) t2(n);

在这里插入图片描述
第一个查询结果中没有数字 1;第二个查询结果中保留了一个数字 1。

分组与排序

对于分组操作,集合操作符中的每个查询都可以包含一个 GROUP BY,不过它们只针对各
自进行分组;如果想要对最终结果进行分组,需要在外层嵌套一个 SELECT 语句:

select n, count(*) from (
 select * from (values(1),(2)) t1(n)
 union all
 select * from (values(1),(3)) t2(n)) t
group by n;

在这里插入图片描述
如果要对集合运算的数据进行排序,需要将 ORDER BY 子句写在最后;集合操作符中的第
一个查询中不能出现排序操作:

select * from (values(1),(2)) t1(n)
order by n
union all
select * from (values(1),(3)) t2(n);

在这里插入图片描述

集合操作优先级

PostgreSQL 支持同时使用多个集合操作符,此时我们需要注意它们的优先级:

SELECT column1, column2
 FROM table1
UNION [DISTINCT | ALL]
SELECT col1, col2
 FROM table2
INTERSECT [DISTINCT | ALL]
SELECT c1, c2
 FROM table3;

多个集合操作符使用以下执行顺序:

  • 相同的集合操作符按照从左至右的顺序执行;
  • INTERSECT 的优先级高于 UNIONEXCEPT
  • 使用括号可以修改集合操作的执行顺序。
    以下示例使用了两个 UNION 操作符,其中一个增加了 ALL 选项:
select * from (values(1)) t1(n)
union all
select * from (values(1)) t2(n)
union
select * from (values(1)) t3(n);

在这里插入图片描述
查询最终的结果只有一个数字 1,因为最后的 UNION 去除了重复的数据。
以下示例使用了两个不同的集合操作符:

select * from (values(1)) t1(n)
union all
select * from (values(1)) t2(n)
intersect
select * from (values(1)) t3(n);

在这里插入图片描述
查询最终的结果包含了两个数字 1,因为 INTERSECT 先执行,最后的 UNION ALL 保留了
重复的数据

最后看一个使用括号的示例:

(
select * from (values(1)) t1(n)
union all
select * from (values(1)) t2(n)
)
intersect
select * from (values(1)) t3(n);

在这里插入图片描述

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

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

相关文章

CSS中的相对单位和绝对单位,以及rem自适应布局

在CSS中,我们经常需要指定元素的尺寸、间距和位置。为此,我们可以使用各种单位来定义这些值。本文将重点介绍CSS中的相对单位和绝对单位,并解释它们之间的区别。 相对单位 百分比(%):百分比单位是相对于父元…

Go 官方标准编译器中所做的优化

本文是对#102 Go 官方标准编译器中实现的优化集锦汇总[1] 内容的记录与总结. 优化1-4: 字符串和字节切片之间的转化 1.紧跟range关键字的 从字符串到字节切片的转换; package mainimport ( "fmt" "strings" "testing")var cs10086 s…

C#里Bitmap转Halocn的HObject

一般情况下,图像的width是4的倍数的话,用以下代码便可将彩色bitmap转出halcon里的HObject public void Bitmap2HObject(Bitmap bmp, out HObject image){try{Rectangle rect new Rectangle(0, 0, bmp.Width, bmp.Height);BitmapData srcBmpData bmp.L…

通讯录管理系统(个人学习笔记黑马学习)

1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C来实现一个通讯录管理系统系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人显示联系人:显示通讯录中所有联系人信…

Vue2项目练手——通用后台管理项目第二节

Vue2项目练手——通用后台管理项目 路由限制重复跳转CommonAside.vue 顶部header组件搭建与样式修改右边用户菜单栏使用的组件图片CommonHeader.vue Vuex实现左侧折叠文件目录store/index.jsstore/tab.jsmain.jsCommonHeader.vueCommonAside.vueMain.vue 路由限制重复跳转 路由…

elementUi中的el-table表格的内容根据后端返回的数据用不同的颜色展示

效果图如下&#xff1a; 首先 首先&#xff1a;需要在表格行加入 <template slot-scope"{ row }"> </template>标签 <el-table-column prop"usable" align"center" label"状态" width"180" ><templ…

MPC模型预测控制器学习笔记(附程序)

本文用于记录学习DR_CAN老师发布的MPC系列视频教程的相关内容&#xff0c;文章中放的源码也是DR_CAN老师提供的程序示例&#xff0c;链接如下&#xff1a; DR_CAN老师的视频教程链接&#xff08;点击可跳转&#xff09; DR_CAN老师提供的程序示例&#xff08;点击可跳转&#x…

探索三丰云:免费虚拟主机与云服务器的新选择**

随着云计算技术的飞速发展&#xff0c;我们有了更多的选择来满足我们的在线业务需求。今天&#xff0c;我想向大家推荐一款我最近发现的优质服务——三丰云。 三丰云&#xff08;https://www.sanfengyun.com&#xff09;是一家提供免费虚拟主机和免费云服务器的公司&#xff0…

热门框架漏洞

文章目录 一、Thinkphp5.0.23 代码执行1.thinkphp5框架2.thinkphp5高危漏洞3.漏洞特征4.THinkphp5.0 远程代码执行--poc5.*TP5实验一(Windows)a.搭建实验环境b.测试phpinfoc.写入shelld.使用菜刀连接 6.*TP5实验二(Linux)a.测试方法b.测试phpinfoc.写入shelld.反弹shell&#x…

Windows系统中Apache Http服务器简单使用

1 简介 Apache HTTP服务器是一个开源的、跨平台的Web服务器软件。它由Apache软件基金会开发和维护。Apache HTTP服务器可以在多种操作系统上运行&#xff0c;如Windows、Linux、Unix等&#xff0c;并且支持多种编程语言和技术&#xff0c;如PHP、Perl、Python、Java等。…

物联网智慧种植农业大棚系统

一、项目背景 智慧农业是是将物联网技术和农业生产箱管理的新型农业&#xff0c;依托部署在农业生产现场的各种传感节点&#xff0c;以物联网网关为通道形成数据传输网络&#xff0c;可以实现控制柜、环境监测传感器、气象监测机器等设备的远程监控&#xff0c;达到及时高校的…

docker 安装 Nginx

1、下载 docker pull nginx:latest 2、本地创建管理目录 mkdir -p /var/docker/nginx/conf mkdir -p /var/docker/nginx/log mkdir -p /var/docker/nginx/html 3、将容器中的相应文件复制到管理目录中 /usr/docker/nginx docker run --name nginx -p 80:80 -d nginxdocke…

小猫爪:嵌入式小知识18-XCP SeedNKey.dll

小猫爪&#xff1a;嵌入式小知识18-XCP SeedNKey.dll 0 目录1 前言2 生成DLL2.1 下载模板代码2.2 函数简介2.2 DLL编译 3 使用DLLEND 0 目录 小猫爪&#xff1a;嵌入式小知识15-XCP基础简介小猫爪&#xff1a;嵌入式小知识16-XCP协议简介小猫爪&#xff1a;嵌入式小知识17-XCP…

OpenGl图像的位移及旋转

一般而言&#xff0c;改变物体的位置时&#xff0c;需要改变每一帧所有顶点的坐标&#xff0c;计算量巨大 可以将每一个顶点用向量值表示&#xff0c;使用位移矩阵&#xff0c;缩放矩阵&#xff0c;旋转矩阵对顶点进行操作。 顶点着色器&#xff1a; #version 330 core layo…

LeetCode--HOT100题(46)

目录 题目描述&#xff1a;114. 二叉树展开为链表&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;114. 二叉树展开为链表&#xff08;中等&#xff09; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链…

解决Jackson解析JSON时出现的Illegal Character错误

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

微信小程序echart导出图片

echarts版本5.1.0 用到的echarts组件是uni插件市场的echart组件 <div style"overflow: hidden;"><dCanvas class"uni-ec-canvass" id"uni-ec-canvas" ref"canvas" canvas-id"mychart-gauge" :ec"ec"&g…

恒运资本:如何利用股票筹码进行选股?有什么方法?

在进行股票之前最重要的便是进行股票的挑选&#xff0c;股票挑选有许多办法&#xff0c;比如说消息面选股、使用筹码进行选股等。那么怎么使用股票筹码进行选股&#xff1f;有什么办法&#xff1f;就下面就由恒运资本为大家剖析&#xff1a; 投资者能够根据以下筹码变动特点来进…

基于猎食者算法优化的BP神经网络(预测应用) - 附代码

基于猎食者算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于猎食者算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.猎食者优化BP神经网络2.1 BP神经网络参数设置2.2 猎食者算法应用 4.测试结果&#xff1a;5.Matlab代…

QT基础教程之八Qt消息机制和事件

QT基础教程之八Qt消息机制和事件 QPainter Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于QPainter&#xff0c;QPainterDevice和QPaintEngine三个类。 QPainter用来执行绘制的操作&#xff1b;QPaintDevice是一个二维空间的抽象&#…