mysql集合相加_用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进阶教材》,仅做笔记。练习部分代码均为原创。
mysql集合相加_用SQL进行集合运算相关推荐
- 传递集合对象_面试必备——Java集合框架
Java集合框架面试题 常见集合 集合可以看作是一种容器,用来存储对象信息. 数组和集合的区别: (1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射 ...
- mysql通过集合查询_连接查询与集合查询
4.外连接查询 在前面讲述的连接操作中,返回的结果都是满足连接条件的记录.有些时候,开发人员或者用户对于不满足连接条件的部分记录也感兴趣,这个时候就需要使用外连接查询.外连接查询不仅可以返回满足连接条 ...
- python两个集合相加_两个集合相加java
Python常见数据结构整理 Python中常见的数据结构可以统称为容器(container).序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 一.序列(列表.元组和字符串) ...
- linux mysql换成_把 SQL Server 迁移到 Linux?不如换成 MySQL
(点击上方公众号,可快速关注) 英文:Tony Branson 译者:Linux中国 链接:linux.cn/article-8073-1.html 最近几年,数量庞大的个人和组织放弃 Windows ...
- collection集合 网_房地产信托业务(集合)2020年1-9月分析报告
说明: 1.本次对信托行业57家信托公司房地产信托数据进行分析.数据来源于用益信托网的统计,部分开发商项目的数据.以及分区域的项目数据,信息不全(有些数据为空白).因此,具体项目加总的数据与文中写的总 ...
- mysql 游戏背包_用sql实现背包问题
背包问题是一道经典的组合优化问题,给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,如何选择使得物品的总价格最高,背包问题又可以分成01背包,完全背包和多重背包等,网上关于这个问题的解答有 ...
- 简述mysql完全备份过程_【SQL】MySQL之使用mysqldump全备份及恢复过程详解_MySQL
mysqldump bitsCN.com [SQL]MySQL之使用mysqldump全备份及恢复过程详解 [目标]使用mysqldump做全备,结合mysql自带的binlog功能实现增量备份 为了 ...
- mysql psm 编程_【SQL】持久性存储模块PSM
1. 创建PSM函数和过程 创建过程: CREATE PROCEDURE 名字 (参数) 局部声明: 过程体: 创建函数: CREATE FUNCTION 名字 (参数) RETURNS 类型 局部声 ...
- sql mysql 删除数据库_在sql中将已建数据库删除的详细步骤
上期为大家讲解的建立数据库的方法,这期小编为大家讲解在sql中将已建数据库删除的详细步骤,一起去下文看看吧. 今天主要针对的是在SQL Server中已将建立好数据库之后呢!我们这边对建立完毕的数据库 ...
最新文章
- Nat. Med. | 制定指导原则以报告AI在临床试验中的使用
- BGP基本实验拓扑图--《献给学习的人》
- 160个Crackme010
- css3 仿aero,让Qt支持Win7的Aero和毛玻璃效果
- php5.3升级5.4,centos php 5.3升级到 php5.4版本
- Java用户修改密码
- 电脑DNS优选网络加速工具 可以提高网速
- 比1亿像素还要更厉害!三星Galaxy S11相机应用代码泄露天机...
- Spring Boot 细节挖掘(全局异常处理)
- VB.Net实现Ftp上传的方法
- 一分钟教你解决前端分流问题
- 安装Office2010提示缺少MSXML版本6.10.1129.0的解决方法
- GitLab 创建项目组及将代码导入项目
- 阿里巴巴2017实习面试
- BZOJ 4216: Pig
- 飞思卡尔S12系列(基于MC9S12XET256MAA和/MC9S12XEP100)RTI资料总结和分享
- LNK2038: “_ITERATOR_DEBUG_LEVEL”的不匹配项
- java实现通过浏览器方式下载文件及多个文件
- 时钟周期、机器周期、指令周期、总线周期的区别
- 虚拟机(一)虚拟机安装Mysql
热门文章
- 工业软件linux版,恩智浦宣布针对工业4.0推出基于社区的工业Linux发行版
- 织梦熊掌号提交urls.php,织梦后台如何接入熊掌号教程
- web前端高级React - React从入门到进阶之组件的状态提升
- AMBA总线协议-ahb总线互联结构结合协议的理解
- Esxi 克隆 虚拟机
- 利用GPT2生成莎士比亚写作风格的文本(python实现)
- java婚纱影楼管理系统论文_基于Java的婚纱影楼管理系统设计论文
- Response和Request常用方法以及mmgrid插件的学习
- android8.1系统连接不上BLE蓝牙设备问题解决
- Java学习之路5——面向对象(OOP)和异常机制