mysql 字段集合运算_如何用SQL进行集合运算
如何用SQL进行集合运算
发布时间:2020-07-15 14:31:43
来源:亿速云
阅读:117
作者:Leah
今天就跟大家聊聊有关如何用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进行集合运算 有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
mysql 字段集合运算_如何用SQL进行集合运算相关推荐
- excel mysql 参数查询语句_如何用SQL语句查询Excel数据?
如何用SQL语句查询Excel数据? Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMO ...
- excel mysql 参数查询语句_如何用SQL语句查询Excel数据
Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT * FROM OpenDataSource( ' ...
- mysql 留存_如何用SQL做留存率分析
背景 APP分析中经常用到AARRR模型(海盗模型)用来分析APP的现状,其中一个重要节点就是提高留存(Acquisition),而留存率这个指标在这个阶段可以说是核心指标也不为过.那如何用SQL计算 ...
- sql的加减乘除运算_小白学sql(一)
最近在b站学习sql,在这里做笔记.感兴趣的同学可以一起学习呀~ 1. 基本介绍 sql_store是一个数据库,而customers是数据库中的一个表格. 1.1 如何选择一个数据库 最简单的操作就 ...
- sql同时修改两个表的数据_如何用SQL做数据透视表?
- 点击上方"中国统计网"订阅我吧!- 讲过很多次,数据分组和数据透视表很像,Sql 中的数据分组大家应该都很熟悉了,用的就是 group by. 数据透视表是作为一个数据分析师最 ...
- in ms sql 集合参数传递_神奇的 SQL → 为什么 GROUP BY 之后不能直接引用原表中的列?...
GROUP BY 后 SELECT 列的限制 标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键.聚合函数(SUM ...
- 加减法叫做什么运算_【课堂实录】加减法运算的本质(四上)
原标题:[课堂实录]加减法运算的本质(四上) A类目标:能用自己的语言描述加法和减法运算: B类目标:1.从集合的合并与拆分,"+1"与"-1",理解加法运算和 ...
- java迭代器不能修改集合值_关于使用迭代器对集合进行遍历时,不能对集合进行修改的论证...
关于使用迭代器对集合进行遍历时,不能对集合进行修改的论证## 标题 ## 摘要:迭代器再帮助我们进行对集合的元素进行遍历提供了有效的方法,java采用迭代器模式能在不暴露集合对象内部元素的情况下,对元 ...
- 左移右移位运算_计算机硬件技术基础M2——计算机运算基础(二)
在上一篇中,我们学习到了计算机底层的一些机器码,以及一些行业标准,这一章,我们将接着学习机器码的一些比较与相关计算. 一.浮点数表示和定点数的比较 ① 当字长相同时,浮点数表示的范围要大得多. ②浮点 ...
最新文章
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(一)
- 案例驱动python编程入门-python ddt数据驱动实例代码分享
- 汇编语言---GCC内联汇编
- 视频转音频时,安卓和iOS播放的时长翻倍 --- 好一个坑
- latex 基本用法(五)
- 在 Emacs 里修改现有文件的编码格式(转载)
- 【java毕业设计】基于javaEE+Mybatis的WEB仓库管理系统设计与实现(毕业论文+程序源码)——仓库管理系统
- math_Taylor_常见幂级数展开
- 让GitHub沸腾的阿里内部神作Java并发原理JDK源码手册,现已开源
- python - TypeError: combat(sume,sumu) missing 2 required positional arguments: sume,sumu
- Acitivity的生命周期
- 四川SFSCB-A15/4PY智能浪涌后备保护器 遥信功能 上传防雷系统平台
- 成功解决 pycharm一直indexing
- 2018四川高考数学(全国卷3)理科21题以泰勒公式为命题背景(同时深挖去年高考题)和它的另类解法的瞎谈...
- iOS图片不失真拉伸方法
- [物理实验]计算不确定度
- MySQL 启停过程了解一二
- 博客及微博下载工具比较
- 词:王恩信Est/二胖u曲:王恩信Est/二胖u原曲:飞 - 王恩信Est/二胖u风浪没平息我宣告奔跑的意义这不是叛逆我只是淋了一场雨没怀疑燃烧的梦都飞哪去问自己这次我不会放弃你是否
- 软阈值(Soft Thresholding)函数和硬阈值(Hard Thresholding)函数