SQL集合运算

 集合论是SQL语言的根基。

1 集合运算

注意事项:

1)SQL能操作具有重复行的集合,可以通过可选项ALL来支持。

如果直接使用UNION或INTERSECT,结果里不会出现重复的行。如果想在结果里留下重复行,可以加上可选项ALL。写作UNION ALL。

集合运算符为了排除掉重复行,会默认发生排序,而加上可选项ALL之后,就不会再排序了,所以性能会提升。

2) 集合运算符有优先级。

INTERSECT比UNION和EXCEPT的优先级更高。

1.1 实践

1.1.1 检查集合相等性

图 两个集合t_table_a与t_table_b

-- UNION,如果合并后与两个集合的行数一致,则两个集合相同
SELECT CASE 
WHEN COUNT(*) = (SELECT COUNT(*) FROM t_table_a)
AND COUNT(*) = (SELECT COUNT(*) FROM t_table_b) 
THEN '集合相等'  ELSE '集合不相等' END AS res 
FROM 
(SELECT *
FROM t_table_a
UNION
SELECT *
FROM t_table_b)tmp
-- 集合运算,如果A与B的并集等于A与B的交集。 则A=B
SELECT CASE WHEN COUNT(*) = 0 THEN '相等' ELSE '不相等' END AS res
FROM 
((SELECT *
FROM t_table_a
UNION 
SELECT *
FROM t_table_b)
EXCEPT 
(SELECT *FROM t_table_aINTERSECT SELECT *FROM t_table_b
))tmp;

1.1.2 用差集实现关系除法运算

图 员工技能t_emp_skills 表与技能t_skills 表及期望输出

需求:找出精通t_skills 表所有技能的员工。

-- 差集 EXCEPT
SELECT DISTINCT emp 
FROM t_emp_skills e 
WHERE NOT EXISTS 
(SELECT skillFROM t_skillsEXCEPT SELECT skill FROM t_emp_skills WHERE emp = e.emp 
);	

需求:找出刚好拥有全部技术的员工(即擅长的技能和技能表的一摸一样,不多也不少)。

SELECT emp 
FROM t_emp_skills e 
WHERE NOT EXISTS ((SELECT skillFROM t_skills EXCEPT SELECT skill FROM t_emp_skillsWHERE emp = e.emp)
)
GROUP BY emp 
HAVING COUNT(*) = (SELECT COUNT(*) FROM t_skills);

1.1.3 寻找相等的子集

图 供应商-零件关系t_sup_parts表及期望输出

需求:找出经营的零件在种类数和种类上都完全相同的供应商组合。

SELECT s1.sup sup1,s2.sup sup2
FROM t_sup_parts s1
CROSS JOIN t_sup_parts s2 
WHERE s1.sup < s2.sup AND s1.part = s2.part
GROUP BY s1.sup,s2.sup
HAVING COUNT(*) = (SELECT COUNT(*) FROM t_sup_parts WHERE sup = s1.sup)
AND COUNT(*) = (SELECT COUNT(*) FROM t_sup_parts WHERE sup = s2.sup);

1.1.4 高效删除重复行

图 存在重复数据的t_fruit_info表

需求:删除表中重复的数据。

-- 使用关联子查询
DELETE FROM t_fruit_info f
WHERE row_id < (SELECT *FROM (SELECT MAX(row_id)FROM t_fruit_info WHERE `name` = f.name AND price = f.price) temp
);

关联子查询性能比较差。

-- 用差集运算 
DELETE FROM t_fruit_info
WHERE row_id IN (SELECT * FROM (SELECT row_idFROM t_fruit_info EXCEPT (SELECT row_idFROM t_fruit_infoGROUP BY `name`,price)) tmp
);
-- NOT IN 求补集 
DELETE FROM t_fruit_info
WHERE row_id NOT IN (SELECT * FROM (SELECT MAX(row_id)FROM t_fruit_info GROUP BY `name`,price) tmp
);

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

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

相关文章

【PGCCC】Postgresql 存储设计

架构图 用户查询指定 page 的数据 首先查询该 page 是否在缓存中&#xff0c;通过 hash table 快速查找它在缓存池的位置 如果存在&#xff0c;那么从缓存池读取返回 如果不存在需要从磁盘读取数据&#xff0c;并且放入到缓存池中&#xff0c;然后返回 postgresql 存储单位 …

CTFHub每日练习

文章目录 技能树CTF Web信息泄露目录遍历PHPINFO备份文件下载网站源码bak文件vim缓存.DS_Store Git泄露Logstash index方法一方法二 密码口令弱口令 技能树 CTF Web 信息泄露 目录遍历 PHPINFO 备份文件下载 网站源码 当开发人员在线上环境中对源代码进行了备份操作&#x…

pycharm分支提交操作

一、Pycharm拉取Git远程仓库代码 1、点击VCS > Get from Version Control 2、输入git的url&#xff0c;选择自己的项目路径 3、点击Clone&#xff0c;就拉取成功了 默认签出分支为main 选择develop签出即可进行开发工作 二、创建分支&#xff08;非必要可以不使用&#xf…

SkyWalking-安装

SkyWalking-简单介绍 是一个开源的分布式追踪系统&#xff0c;用于检测、诊断和优化分布式系统的功能。 支持 ElasticSearch、H2、MySQL、PostgreSql 等数据库 基于 ElasticSearch 的情况 ElasticSearch&#xff08;ES&#xff09; 安装 1、下载并解压 https://www.elastic…

【MySQL基础刷题】总结题型(三)

十题左右&#xff0c;便于复习 1.查询结果的质量和占比2.每月交易I3.销售分析III4.只出现一次的最大数字5.买下所有产品的客户6.员工的直属部门7.指定日期的产品价格 1.查询结果的质量和占比 avg大神啊… SELECT query_name, ROUND(avg(rating / position), 2) as quality, …

PyEcharts | 通过分析奥迪车购买数据来学习柱状折线复合图像的绘制方法

柱状折线复合图像效果 实现步骤 df pd.read_csv(3汽车之家-奥迪汽车数据.csv) df.head()print(df.shape) df.info()注意所有 列字段 对应的数据类型&#xff0c;同时注意绘图所需要的汽车销售数量和价格 df1 df.copy() df1 df1[~df1[百公里油耗].str.contains(百公里电耗…

Spring Data Redis常见操作总结

我列出来的都是最常用的&#xff0c;其他的你要自己去搜搜 1. 列表类型数据 Autowired private RedisTemplate<String ,Object> redisTemplate;public void f1() {String k "key";ListOperations<String, Object> list redisTemplate.opsForList();r…

【linux】如何扩展磁盘容量(VMware虚拟机)-转载

如何扩展磁盘容量(VMware虚拟机) 一、前置准备工作 扩展虚拟机磁盘前&#xff0c;需要先把虚拟机关机才能进行扩展磁盘操作 1.选择虚拟机设置&#xff0c;如下图所示 2.输入你想扩展的磁盘容量&#xff0c;以本次实操为例&#xff0c;我这里输入的30G&#xff08;具体按照实…

本机ip地址和网络ip地址一样吗

在数字化时代的浪潮中&#xff0c;IP地址作为网络设备身份的象征&#xff0c;扮演着举足轻重的角色。然而&#xff0c;当我们谈论IP地址时&#xff0c;常常会听到“本机IP地址”与“网络IP地址”这两个术语&#xff0c;它们之间是否存在差异&#xff1f;又该如何准确理解并区分…

Cacheable注解导致线程block

优质博文&#xff1a;IT-BLOG-CN 环境&#xff1a;jdk8/tomcat7 一、问题现象 应用系统再一次发布回退时&#xff0c;cpu util突然徒增到100%以上&#xff0c;与此同时&#xff0c;服务响应时间大幅度增加&#xff0c;依赖该服务的应用接连抛出超时异常&#xff0c;发生熔断。…

【数据分享】中国证券期货统计年鉴(2001~2023)

数据介绍 一、《中国证券期货统计年鉴(2023)》(中英文)收录了2022年证券期货市场的统计数据以及与证券期货市场相关的部分宏观经济数据&#xff0c;是一部全面反映中华人民共和国证券期货市场发展情况的资料性年刊。 二、年鉴分为概况、股票、债券、基金、期货、上市和挂牌公…

IDEA 2024.3正式版发布,速览新功能!

0 前言 IntelliJ IDEA 2024.3 引入了一系列可以提升您的开发体验的强大新功能。 IDE 现在提供代码逻辑结构的表示&#xff0c;简化了 Kubernetes 应用程序的调试体验&#xff0c;引入了集群范围的 Kubernetes 日志访问。 1 关键亮点 1.1 Structure工具窗口中的 Logical代码结…

Docker 基础命令介绍和常见报错解决

介绍一些 docker 可能用到的基础命令&#xff0c;并解决三个常见报错&#xff1a; 权限被拒绝&#xff08;Permission Denied&#xff09;无法连接到 Docker 仓库&#xff08;Timeout Exceeded&#xff09;磁盘空间不足&#xff08;No Space Left on Device&#xff09; 命令以…

【大语言模型】ACL2024论文-10 CSCD-IME: 纠正拼音输入法产生的拼写错误

【大语言模型】ACL2024论文-10 CSCD-IME: 纠正拼音输入法产生的拼写错误 目录 文章目录 【大语言模型】ACL2024论文-10 CSCD-IME: 纠正拼音输入法产生的拼写错误目录摘要研究背景问题与挑战如何解决创新点算法模型1. 错误检测模型2. 伪数据生成模块3. n-gram语言模型过滤4. 多任…

前端(2)——快速入门CSS

参考&#xff1a; 罗大富 CSS 参考手册 | 菜鸟教程 CSS 参考手册 1. CSS CSS全名是层叠样式表&#xff0c;中文名层叠样式表。用于定义网页样式和布局的样式表语言。 通过 CSS&#xff0c;你可以指定页面中各个元素的颜色、字体、大小、间距、边框、背景等样式&#xff0c;…

电阻测试流程

1.外观检查 &#xff08;1&#xff09;样品上丝印与规格书中相符&#xff0c;0402以上封装电阻要有标称电阻值&#xff0c;丝印清晰。 &#xff08;2&#xff09;检验外观&#xff0c;主要包含以下几点&#xff1a; a) 电阻器本体饱满&#xff0c;有光泽&#xff0c;不允许有气…

万博智云产品完成与ZStack Cloud云平台兼容性互认证

摘要 近日&#xff0c;上海云轴科技股份有限公司(简称“云轴科技ZStack”)与万博智云信息科技&#xff08;上海&#xff09;有限公司&#xff08;简称“万博智云OnePro Cloud”&#xff09;完成产品兼容性互认证。经过测试&#xff0c;万博智云OnePro Cloud两款旗舰产品HyperB…

深度学习框架Pytorch介绍和示例

目录 一. 简介 1.1动态计算图 1.2自动化功能 二. 主要特性 2.1 动态计算图 2.2 自动求导 2.3 强大的社区支持 2.4 多平台支持 三. 核心组件 3.1 Tensor 3.2 Autograd 3.3 nn.Module 3.4 Optim 四. 数据处理 五. 神经网络定义与训练 5.1定义神经网络&#xff1a; 5.2训练过…

鼠标点击(二)与接口函数集合的的实现

&#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09;

基于Spring Boot+Vue的多媒体素材管理系统的设计与实现

一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&#xff1a; 技术&#xff1a;框架Vue.js&#xff1b;UI库&#xff1a;ElementUI&#xff1b; 开发工具&…