如何用SQL进行集合运算
发表于:2024-10-04 作者:千家信息网编辑
千家信息网最后更新 2024年10月04日,今天就跟大家聊聊有关如何用SQL进行集合运算 ,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、比较表和表drop table if exis
千家信息网最后更新 2024年10月04日如何用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安全错误
数据库的锁怎样保障安全
中国有几大超级服务器
融资软件开发系统
监控pc网络安全吗
集合怎么取出数据库
科普数据库
医疗管理软件开发平台
浪潮服务器 风扇
校园网络安全ppt百度文库
阿里云服务器如何连接上去
数据中心服务器怎么防护
我要网络安全线上答题
短距离传输网络技术
网络安全主题报告100字
电子政务网络安全管理论文
危化品数据库
网络安全目标书
本地数据库.dat
宜春软件开发定制
验证表单数据与数据库
小米wifi怎么开服务器
曲靖市政府网络安全
drs服务器地址
电影行业的互联网的科技应用
数据库怎么找相同的对象
瓦力 安装数据库失败
服务器跑ar
威联通用nas做网站服务器
网络安全规划咨询标书
天津加工软件开发检测
观看网络安全活动有感