如何用SQL进行集合运算
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天就跟大家聊聊有关如何用SQL进行集合运算 ,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、比较表和表drop table if exis
千家信息网最后更新 2026年10月31日如何用SQL进行集合运算
今天就跟大家聊聊有关如何用SQL进行集合运算 ,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1、比较表和表
drop table if exists tbl_a;create table tbl_a(key1 varchar(10),col_1 int4,col_2 int4,col_3 int4);insert into tbl_a values('A', 2, 3, 4);insert into tbl_a values('B', 0, 7, 9);insert into tbl_a values('c', 5, 1, 6);drop table if exists tbl_b;create table tbl_b(key1 varchar(10),col_1 int4,col_2 int4,col_3 int4);insert into tbl_b values('A', 2, 3, 4);insert into tbl_b values('B', 0, 7, 9);insert into tbl_b values('c', 5, 1, 6);-- ## 如果union a b 行数一致则两张表相等 select count(1) row_cnt from ( select * from tbl_A union select * from tbl_b ) tmp;直接求两表的不同之处
(select * from tbl_a except select * from tbl_b) union all (select * from tbl_b except select * from tbl_a);
2、用差集实现关系除法运算
建表
drop table if exists skills;create table skills(skill varchar(10));insert into skills values('oracle');insert into skills values('unix');insert into skills values('java');drop table if exists empskills;create table empskills(emp varchar(10),skill varchar(10));insert into empskills values('相田','oracle');insert into empskills values('相田','unix');insert into empskills values('相田','java');insert into empskills values('相田','c#');insert into empskills values('神奇','oracle');insert into empskills values('神奇','unix');insert into empskills values('神奇','java');insert into empskills values('平井','oracle');insert into empskills values('平井','unix');insert into empskills values('平井','PHP');insert into empskills values('平井','Perl');insert into empskills values('平井','C++');insert into empskills values('若田部','Perl');insert into empskills values('度来','oracle');--把除法变成减法select distinct emp from empskills es1 where not exists (select skill from skills expect select skill from empskills es2 where es1.emp = es2.emp);
3、寻求相等的子集
drop table if exists supparts;create table supparts(sup varchar(10),part varchar(10));insert into supparts values('A', '螺丝');insert into supparts values('A', '螺母');insert into supparts values('A', '管子');insert into supparts values('B', '螺丝');insert into supparts values('B', '管子');insert into supparts values('C', '螺丝');insert into supparts values('C', '螺母');insert into supparts values('C', '管子');insert into supparts values('D', '螺丝');insert into supparts values('D', '管子');insert into supparts values('E','保险丝');insert into supparts values('E', '螺母');insert into supparts values('E', '管子');insert into supparts values('F','保险丝');思路: 两个供应商都经营同种类型的零件 (简单的按照零件列进行连接) 两个供应商的零件类型数相同(即存在一一映射)(count限定)
select a.sup s1, b.sup s2 from supparts a, supparts b where a.sup < b.sup -- 生成供应商的全部组合 and a.part = b.part -- 条件1:经营同种类型的零件 group by a.sup, b.suphaving count(*) = (select count(1) -- 条件2:经营的零件的数量种类相同 a = 中间数 from supparts c where c.sup = a.sup) and count(*) = (select count(1) -- 条件2:经营的零件的数量种类相同 b = 中间数 from supparts d where d.sup = b.sup);
4、删除重行
drop table if exists products;create table products(rowid int4,name1 varchar(10),price int4);insert into products values(1,'苹果',50);insert into products values(2,'橘子',100);insert into products values(3,'橘子',100);insert into products values(4,'橘子',100);insert into products values(5,'香蕉',80);-- 删除重行高效SQL语句(1):通过EXCEPT求补集delete from productswhere rowid in (select rowid -- 全部rowid from products except -- 减去 select max(rowid) -- 要留下的rowid from products group by name1, price );-- 删除重行高效SQL语句(2):通过not indelete from products where rowid not in (select max(rowid) from products group by name1, price );
练习
-- 改进中用union的比较select case when count(1) = (select count(1) from tbl_A) and count(1) = (select count(1)+1 from tbl_b) then count(1) else '不相等' end row_cnt from ( select * from tbl_A union select * from tbl_b ) tmp;
看完上述内容,你们对如何用SQL进行集合运算 有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
零件
平井
管子
螺丝
经营
运算
相同
神奇
内容
条件
橘子
类型
螺母
供应
两个
供应商
保险丝
数量
种类
语句
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技图片
科技互联网技术
互联网科技金融
互联网 科技创新
高科技与互联网
浩特互联网科技
一五八零互联网科技
国外互联网科技网站
金融科技和互联网金融
海南购全球互联网科技
银川新华互联网科技职业技术培训学校图片
金融科技与互联网金融相同和不同
和信科技工业互联网
崇明区互联网教育科技售后服务
互联网与医疗科技
电子科技大学互联网创业大赛
互联网金融科技名词解释
2021互联网科技公司排名
下一代互联网重大应用科技园
广东猫王互联网科技有限公司电话
新华互联网科技
广州互联网络科技有限公司
易通互联网络科技有限公司
现代科技和互联网有关系吗
互联网科技寓意
移动互联网科技公司
山东大美朱楼互联网科技有限公司
东风日产互联网科技公司叫什么
银川新华互联网科技学校招聘
科技发展第三阶段互联网时代