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_ ...
随机推荐
- AtCoder Regular Contest 096
AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...
- 智能穿戴设备移动APP端与外设数据传输协议功能模块CMD&ACK表
Notification Module Function CMD ACK Notification History Count [0x0301] [0x0000] [0x01] [0x0301] [0 ...
- crontab 参数详解
crontab 参数 用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下: minute ...
- Pandas选项和自定义
Pandas提供API来自定义其行为的某些方面,大多使用来显示. API由五个相关函数组成.它们分别是 - get_option() set_option() reset_option() descr ...
- 内存中加载DLL DELPHI版
//从内存中加载DLL DELPHI版 unit MemLibrary; interface uses Windows; function memLoadLibrary(pLib: Pointer): ...
- Python jieba 分词
环境 Anaconda3 Python 3.6, Window 64bit 目的 利用 jieba 进行分词,关键词提取 代码 # -*- coding: utf-8 -*- import jieba ...
- spring3: 对JDBC的支持 之 Spring提供的其它帮助 SimpleJdbcInsert/SimpleJdbcCall/SqlUpdate/JdbcTemplate 生成主键/批量处理
7.4 Spring提供的其它帮助 7.4.1 SimpleJdbc方式 Spring JDBC抽象框架提供SimpleJdbcInsert和SimpleJdbcCall类,这两个类通过利用JDB ...
- spring3: Aspectj后置返回通知
Aspectj后置返回通知 接口: package chapter1.server; public interface IHelloService2 { public int sayAfterRetu ...
- MVVM3
MVVM设计模式 2010-09-19 23:59:18| 分类: MVVM | 标签:mvvm silverlight4 mvc mvp command |举报|字号 订阅 一 ...
- maven setting仓库镜像
国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用. 最新更新:2016年11月11日 18:05:40 阿里云提供Maven私服,我把配置文件贴一下,自 ...