用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 

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进阶教材》,仅做笔记。练习部分代码均为原创。

以上就是用SQL进行集合运算 的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1790872.html

(0)
上一篇 2025年2月20日 08:56:39
下一篇 2025年2月20日 08:57:42

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 十五个常用的 Laravel 集合(Collection)

    Laravel Eloquent 通常返回一个集合作为结果,集合包含很多有用的、功能强大的方法。你可以很方便的对集合进行过滤、修改等操作。本次教程就一起来看一看集合的常用方法及功能。集合并不仅限于 eloquent ,也可以单独使用。但 E…

    2025年3月13日
    200
  • html5规定是否对元素进行拼写和语法检查的属性spellcheck

    实例 进行拼写检查的可编辑段落: 这是一个段落。 登录后复制 浏览器支持 IE、Firefox、Chrome、SafariOpera 定义和用法 spellcheck 属性规定是否对元素进行拼写和语法检查。 可以对以下内容进行拼写检查: i…

    编程技术 2025年3月11日
    200
  • 利用Canvas对图片进行处理的方法

    canvas,中文译为“画布”,html5中新增了元素,可以结合javascript动态地在画布中绘制图形。本文主要给和家介绍了关于利用canvas对图片进行处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考…

    2025年3月8日
    200
  • JavaScript的数组使用集合

    这次给大家带来javascript的数组使用集合,javascript数组使用集合的注意事项有哪些,下面就是实战案例,一起来看一下。 1.join() 将数组中的所有元素转化为字符串并连接在一起 var a=[1,2,3,4];a.join…

    编程技术 2025年3月8日
    200
  • 怎样使用React进行组件库的开发

    这次给大家带来怎样使用React进行组件库的开发,使用React进行组件库的开发的注意事项有哪些,下面就是实战案例,一起来看一下。 最近针对日常业务需求使用react封装了一套[组件库], 大概记录下整个开发过程中的心得。由于篇幅原因,在这…

    2025年3月8日
    200
  • 怎么使用vue的v-for来进行遍历二维数组

    这次给大家带来怎么使用vue的v-for来进行遍历二维数组,使用v-for进行遍历二维数组的注意事项有哪些,下面就是实战案例,一起来看一下。 如下所示: {{itemss}} 登录后复制 其中,data数据为: this.data = [ …

    2025年3月8日
    200
  • 在vue中如何使用axios进行跨域处理

    这次给大家带来在vue中如何使用axios进行跨域处理,在vue中使用axios进行跨域处理的注意事项有哪些,下面就是实战案例,一起来看一下。 跨域,一个很是让人尴尬的问题,有些人可以在后台中设置请求头,但是很多前端并不具备后台的知识,并无…

    2025年3月8日
    200
  • 正则表达式怎样对IP进行排序

    这次给大家带来正则表达式怎样对IP进行排序,正则表达式对IP进行排序的注意事项有哪些,下面就是实战案例,一起来看一下。 1、补零,使得可以按照字符串顺序进行比较。 2、截取保留后三位(ip地址最多就3位)。 3、利用Arrays.sort(…

    编程技术 2025年3月8日
    200
  • 正则如何对输入内容进行处理

    这次给大家带来正则如何对输入内容进行处理,正则对输入内容进行处理的注意事项有哪些,下面就是实战案例,一起来看一下。 该小脚本实现的是对输入框内容中取出标签中的src中的内容,然后在原来位置进行替换内容,然后在去除输入内容中的html标签,空…

    编程技术 2025年3月8日
    200
  • MVC+bootstrap界面怎么进行ajax表单验证

    这次给大家带来MVC+bootstrap界面怎么进行ajax表单验证,MVC+bootstrap界面进行ajax表单验证的注意事项有哪些,下面就是实战案例,一起来看一下。 使用bootstrap后他由他自带的样式has-error,想要使用…

    2025年3月8日
    200

发表回复

登录后才能评论