有的数据库不支持intersect,except,所以交集,和差集使用嵌套查询来做比较靠谱。
a表和b表具有完全一样的结构
mysql> desc a;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| tel | varchar(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec) mysql> desc b;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| tel | varchar(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

a表和b表中的数据不同,现在要查询a表和b表的电话号码的交,并,差集:

mysql> select * from a;
+----+------+
| id | tel |
+----+------+
| 1 | 1 |
| 2 | 2 |
+----+------+
2 rows in set (0.00 sec) mysql> select * from b;
+----+------+
| id | tel |
+----+------+
| 1 | 2 |
| 2 | 3 |
+----+------+
2 rows in set (0.01 sec)

交集

//联合查询
mysql> select a.tel from a,b where a.tel = b.tel;
+------+
| tel |
+------+
| 2 |
+------+
1 row in set (0.00 sec) //也可以使用嵌套查询
mysql> select a.tel from a where a.tel in (select b.tel from b);
+------+
| tel  |
+------+
| 2    |
+------+
1 row in set (0.00 sec) //也可以
mysql> select a.tel from a where exists (select * from b where a.tel = b.tel);
+------+
| tel  |
+------+
| 2    |
+------+ //当然intersect有可能是不支持的
mysql> select a.tel from a intersect select b.tel from b;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select b.tel from b' at line

并集

//MySQL从4.0以后是支持union,union all的,其实实现union是非常复杂的
mysql> select a.tel from a union select b.tel from b;
+------+
| tel |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec) //

差集

except所代表的差集,是在a中出现但是不在b中出现的记录;

mysql> select a.tel from a where a.tel not in ( select b.tel from b);
+------+
| tel |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
//同样,except也不一定支持
mysql> select a.tel from a except select b.tel form b;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select b.tel form b' at line

SQL实现交,并,差操作的更多相关文章

  1. Java集合set的并、交、差操作

    集合的并.交.差操作 Set<Integer> result = new HashSet<Integer>(); Set<Integer> set1 = new H ...

  2. 用SQL表达交并差操作

    交-并-差的处理 SQL语言:并运算UNION,交运算INTERSECT,差运算EXCEPT 基本语法形式: 子查询{UNION [ALL] | INTERSECT [ALL] | EXPECT [A ...

  3. (转)SQL对Xml字段的操作

    T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...

  4. SQL对Xml字段的操作

    转:http://www.cnblogs.com/youring2/archive/2008/11/27/1342288.html T-Sql操作Xml数据 一.前言 SQL Server 2005 ...

  5. STL中的set集合容器进行集合运算:并、交、差实例

    集合容器的集合运算:并.交.差: #include "stdafx.h" #include <iostream> #include <set> #inclu ...

  6. 对于超大型SQL SERVER数据库执行DBCC操作

    原文:对于超大型SQL SERVER数据库执行DBCC操作 对于数据库维护,主要使用DBCC CHECKDB来实现,以下是对大型数据库的使用说明,小型数据库一般直接使用就可以了: 1.2008(200 ...

  7. SQL导入txt以及SQL中的时间格式操作

    原文:SQL导入txt以及SQL中的时间格式操作 MySQL中导入txt的指令为: load data local infile "路径名称" into table "表 ...

  8. SQL点滴2—重温sql语句中的join操作

    原文:SQL点滴2-重温sql语句中的join操作 1.join语句 Sql join语句用来合并两个或多个表中的记录.ANSI标准SQL语句中有四种JOIN:INNER,OUTER,LEFTER,R ...

  9. Linq to SQL 简单的增删改操作

    Linq to SQL 简单的增删改操作. 新建数据库表tbGuestBook.结构如下: 新建web项目,完成相应的dbml文件.留言页面布局如下 <body> <form id= ...

  10. MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题

    1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...

随机推荐

  1. Unity3d OnApplicationPause与OnApplicationFocus

    在手机游戏当中,会碰到“强制暂停”,如:锁屏.接电话或短信之类的.如果“强制暂停”时间过长,网络游戏有时得重新登录等事件. 而Unity3d,Android Plugins中的UnityPlayer. ...

  2. butterknife用法总结

  3. Python网络编程笔记

    01. UDP(user datagram protocol)用户数据报协议 01. 特点 01. 无连接 02. 不可靠 03. 每个被传输的数据报必须限定在64KB之内 02. 优点:效率高s 缺 ...

  4. c语言指针笔记

    一.int a[20]1. 数组名代表数组首元素的地址,不代表数组的地址2. 对数组名取地址代表整个数组的地址.a和&a代表的数据类型不一样 a代表数组首元素的地址 &a数组类型 in ...

  5. 《Lua程序设计》9.1 协同程序基础 学习笔记

    协同程序(coroutine)与线程(thread)差不多,也就是一条执行序列,拥有自己独立的栈.局部变量和指令指针,同时又与其他协同程序共享全局变量和其他大部分东西.从概念上讲线程与协同程序的主要区 ...

  6. <转>特征工程(二)

    出处: http://blog.csdn.net/longxinchen_ml/article/details/50493845, http://blog.csdn.net/han_xiaoyang/ ...

  7. Objective-c官方文档 怎么自定义类

    通过类别来给已经存在的类添加方法来实现自定义类 如果你需要添加一个方法给一个已经存在的类,也许能增加新的功能使你更容易来在我们的应用里处理一些事情.最简单的方法是用类别. 这个语法有点想类的接口描述但 ...

  8. liunx trac 插件使用之DateFieldPlugin

    插件GanttCalendarPlugin安装完以后,有一个问题,就是在选择起始与结束时间的时候,为了方便有datepicker功能,如图 需要用到插件DateFieldPlugin,官网链接http ...

  9. css笔记 - 张鑫旭css课程笔记之 border 篇

    border地址 border特性: 能形成BFC但是不能清除浮动.但是bfc也是把子元素的margin包裹进来,但是拿自己的margin穿透没办法的. 边框宽度不支持百分比 透明border可以突破 ...

  10. vue案例 - 使用vue实现自定义多选与单选的答题功能

    4月底立得flag,五月底插上小旗,结果拖到六月底七月初才来执行.说什么工作忙都是借口,就是睡的比猪早,起的比猪晚. 本来实现多选单选这个功能,vue组件中在表单方面提供了一个v-model指令,非常 ...