集合工具类CollectionUtils、ListUtils、SetUtils、MapUtils探究
一.并集:
需求:汇总t1、t2两表的数据
mysql、postgresql、oracle数据库取并集都是用union/union all关键字,不再赘述
二.交集:
需求:选出既在t1表又在t2表的数据
1.mysql数据库取交集,没有对应的关键字,只能把所有要查询的字段都加到where条件上,如下
select t1.name, t1.age from t1, t2 where t1.name = t2.name and t1.age = t2.age //如果t1, t2不是表而只是结果集的话,只需要加上with t1 as(...), t2 as (...)就可以了
2.postgresql/oracle数据库取交集,可以用intersect关键字,如下
select t1.name, t1.age from t1
intersect
select t2.name, t2.age from t2
三.差集:
需求:选出在t1表中但不在t2表中的数据
1.mysql数据库取差集,也没有对应的关键字,有2种方式:
①.用not in
select name, age from t1
where (t1.name, t1.age) not in (select name, age from t2)
注意,where后面字段如果有多个,必须用括号括起来,同时子查询语句也必须用括号括起来
not in这种方式虽然写法简单,但是如果两个表的数据很多的话,那查询起来非常慢
②.用连表查询
sql92:
select t1.name, t1.age from t1
where t1.name != t2.name or t1.age != t2.age
或是
sql99:
select t1.name, t1.age inner join t2
on t1.name != t2.name or t1.age != t2.age
当然,如果t1、t2有多个字段的话,就要一个一个比对,然后用or连接起来
必须用内连接,这点想想左连接和右连接查出的结果集就明白了。
2.postgresql取差集,可以用except关键字,如下:
select t1.name, t1.age from t1
except
select t2.name, t2.age from t2
3.oracle数据库取差集,可以用minus关键字,如下
select t1.name, t1.age from t1
minus
select t2.name, t2.age from t2
最新文章
- 《CPU的工作过程》
- maven学习(下)利用Profile构建不同环境的部署包
- [译]Node.js Best Practices
- Java命令行输入求和的简单学习
- jQuery中的siblings
- Linq 两个集合模糊查询
- JQ插件之imgAreaSelect实现对图片的在线截图功能(java版)
- EasyUI搭建前端框架
- Linux中最受欢迎的邮件传输代理(MTA)
- 部署到IIS后出现ORA-12560的解决办法
- numpy中的matrix矩阵处理
- hihoCoder 1036 Trie图 AC自动机
- ubuntu14.4 分辨率偏低
- 借书证信息管理系统,C语言实现
- 为什么Java的main方法必须是public static void?
- cobbler登录web界面时出现“Internal Server Error”
- kafka命令大全
- delphi DBGRID 刷新定位问题 [问题点数:0分]
- VIM+ctags+cscope
- 安装Jenkins服务