一.并集:

需求:汇总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

最新文章

  1. 《CPU的工作过程》
  2. maven学习(下)利用Profile构建不同环境的部署包
  3. [译]Node.js Best Practices
  4. Java命令行输入求和的简单学习
  5. jQuery中的siblings
  6. Linq 两个集合模糊查询
  7. JQ插件之imgAreaSelect实现对图片的在线截图功能(java版)
  8. EasyUI搭建前端框架
  9. Linux中最受欢迎的邮件传输代理(MTA)
  10. 部署到IIS后出现ORA-12560的解决办法
  11. numpy中的matrix矩阵处理
  12. hihoCoder 1036 Trie图 AC自动机
  13. ubuntu14.4 分辨率偏低
  14. 借书证信息管理系统,C语言实现
  15. 为什么Java的main方法必须是public static void?
  16. cobbler登录web界面时出现“Internal Server Error”
  17. kafka命令大全
  18. delphi DBGRID 刷新定位问题 [问题点数:0分]
  19. VIM+ctags+cscope
  20. 安装Jenkins服务

热门文章

  1. 安卓---下拉刷新---上拉加载---解决导入library等自生成库文件失败的问题
  2. Linux 抓包命令
  3. Struts对输入数据的校验
  4. vultr vps2016年免费升级流量和cpu
  5. Gentoo/Funtoo USE标记介绍
  6. HttpServletRequest对象(一)
  7. [css3动画]渐隐渐现
  8. 照着例子学习protobuf-python
  9. Tarjan算法求解无向连通图的割点、割边、点双连通分量和边双连通分量的模板
  10. git 常用使用及问题记录