MySQL中的交并差
Mysql只提供了并集(union),没有提供差集,和交集,但是我们可以用union来实现交和差,下面即是实现方式:
首先创建两个表:
ERROR 1064 (42000):
mysql> create table k1(
-> name varchar(20));
Query OK, 0 rows affected (0.05 sec) mysql> insert into k1 value('张'),('三'),('风');
Query OK, 3 rows affected (0.02 sec)
mysql> create table k2(
-> name varchar(20));
Query OK, 0 rows affected (0.04 sec)
mysql> insert into k2 value('张'),('三'),('王'),('四'),('李');
Query OK, 5 rows affected (0.01 sec)
查询展示:
mysql> select * from k1;
+------+
| name |
+------+
| 张 |
| 三 |
| 风 |
+------+
3 rows in set (0.00 sec) mysql> select * from k2;
+------+
| name |
+------+
| 张 |
| 三 |
| 王 |
| 四 |
| 李 |
+------+
5 rows in set (0.00 sec)
1.并union
mysql> select * from k1
-> union
-> select * from k2;
+------+
| name |
+------+
| 张 |
| 三 |
| 风 |
| 王 |
| 四 |
| 李 |
+------+
6 rows in set (0.00 sec)
2.并(思想就是:查询两个表合并后,count大于1的)
mysql> select * from (select * from k1 union all select * from k2) as a group by name having count(name) >1;
+------+
| name |
+------+
| 三 |
| 张 |
+------+
2 rows in set (0.00 sec)
需要注意的几点:
1.我们使用在from后的子查询展示的表必须有别名,这里我设置为a
2.使用union等交差并默认是展示distinct的,这里我们必须把所有的展示出来,所以要使用union all
3.从联合的表中查询后,按名字进行分组,然后过滤计数小于2的就为我们想要的结果
3.差(思想:先取其中不重复条目,然后再找属于被减数表的)
mysql> select * from (select * from k1 union all select * from k2) as a where name in (select name from k2) group by name having count(name) = 1;
+------+
| name |
+------+
| 李 |
| 四 |
| 王 |
+------+
3 rows in set (0.00 sec)
需要注意的几点:
1.先查询所有联合的表中count等于1的
2.然后再找属于k2里的
3.所以这个查询的结果就为k2-k1
MySQL中的交并差的更多相关文章
- MySql中的字符数据类型
MySql中的varchar类型 1.varchar类型的变化 MySQL数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255根据不同版本数据库 ...
- MySQL中如何查看“慢查询”,如何分析执行SQL的效率?
一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_time ...
- 【MySQL】漫谈MySQL中的事务及其实现
最近一直在做订单类的项目,使用了事务.我们的数据库选用的是MySQL,存储引擎选用innoDB,innoDB对事务有着良好的支持.这篇文章我们一起来扒一扒事务相关的知识. 为什么要有事务? 事务广泛的 ...
- mysql中字符集的比较
Mysql中utf8_general_ci与utf8_unicode_ci有什么区别呢? 在编程语言中,通常用unicode对中文字符做处理,防止出现乱码,那么在MySQL里,为什么大家都使用utf8 ...
- 【转】Mysql中varchar存放中文与英文所占字节异同
本文转自Ruby china, 原文地址:https://ruby-china.org/topics/24920 一.关于UTF-8 UTF-8 Unicode Transformation Form ...
- MYSQL中关于日期处理的函数
< DOCTYPE HTML PUBLIC -WCDTD HTML TransitionalEN> MySQL数据库中SQL语句中 关于日期.时间\时间戳的函数 一 MySQL 获得当 ...
- 如何查找MySQL中查询慢的SQL语句
如何查找MySQL中查询慢的SQL语句 更多 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow ...
- 【转】Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结
Mysql中utf8_general_ci与utf8_unicode_ci有什么区别呢?在编程语言中,通常用unicode对中文字符做处理,防止出现乱码,那么在MySQL里,为什么大家都使用utf8_ ...
- Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结
Mysql中utf8_general_ci与utf8_unicode_ci有什么区别呢?在编程语言中,通常用unicode对中文字符做处理,防止出现乱码,那么在MySQL里,为什么大家都使用utf8_ ...
随机推荐
- tyvj 1067 合唱队形 dp LIS
P1067 合唱队形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N ...
- Linux平台上DPDK入门指南
1. 简介 本文档包含DPDK软件安装和配置的相关说明.旨在帮助用户快速启动和运行软件.文档主要描述了在Linux环境下编译和 运行DPDK应用程序,但是文档并不深入DPDK的具体实现细节. 1.1. ...
- 提升 CSS 选择器性能的方法
CSS 选择器性能损耗来自? CSS选择器对性能的影响源于浏览器匹配选择器和文档元素时所消耗的时间,所以优化选择器的原则是应尽量避免使用消耗更多匹配时间的选择器.而在这之前我们需要了解CSS选择器匹配 ...
- Android调用系统相机拍照保存照片很小解决方案
保存图片小的一般操作步骤: 1. 调用系统相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityFo ...
- 微信公众号 iOS UITextFiled 用中文键盘输英文出现空格的解决方法
问题出现的现象: 最近公司开发微信公众号邀请码,需要对用户输入进行限制,允许输入的是字母和数字,其他输入会使用正则表达式禁止.但是有iOS用户反映在输入字母过程中,经常几个字母之后,邀请码不对,查看公 ...
- C++中static与const成员
一.static成员 (1)static数据成员 static数据成员的创建是为了对象之间的共享和沟通,具有以下特点: 1.1 static数据成员属于类,只占一份空间(不像普通数据成员每个对象中都有 ...
- 解决通用串行总线(USB)控制器有感叹号
(转自:http://blog.sina.com.cn/s/blog_44190ce10101ejth.html) 通用串行总线控制器:由于其配置信息(注册表中的)不完整或已损坏,Windows ...
- ffmpeg推送RTSP直播流到EasyDarwin报错问题的修复
在之前的博客<ffmpeg推送,EasyDarwin转发,vlc播放 实现整个RTSP直播>中,我们介绍了如何采用ffmpeg进行RTSP推送,实现EasyDarwin直播分发的功能,近期 ...
- Games Delphi developers play
Original link: Games Delphi developers play Delphi game developers are stupid people having too ma ...
- Developing on Windows Phone 8 Devices
Developing on Windows Phone 8 Deviceshttp://docs.madewithmarmalade.com/native/platformguides/wp8guid ...