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_ ...
随机推荐
- 服务器状态监控之snmp&ipmi
一.ipmi 1.简介 IPMI(Intelligent Platform Management Interface)即智能平台管理接口是使硬件管理具备"智能化"的新一代通用接口标 ...
- Ubuntu 16 下面的文件比较工具 Meld
安装 sudo apt-get install meld 使用 很好用,很方便.支持文件比较,文件夹比较.
- SQLite 插入大量数据慢的解决方法
sqlite 插入数据很慢的原因:sqlite在没有显式使用事务的时候会为每条insert都使用事务操作,而sqlite数据库是以文件的形式存在磁盘中,就相当于每次访问时都要打开一次文件,如果对数据进 ...
- Python IOError: [Errno 22] invalid mode ('r') 解决方法
环境 Anaconda3 Python 3.6, Window 64bit 书籍 O'Reilly出版的Wes McKinney编的<Python for Data Analysis> r ...
- QQ钱包,微信,京东钱包,百度钱包,支付宝AGENT
微信Mozilla/5.0 (Linux; Android 7.0; LON-AL00 Build/HUAWEILON-AL00; wv) AppleWebKit/537.36 (KHTML, lik ...
- pOJ-1061 exgcd求同余方程组
链接 就是求(m-n)*a+b*l=y-x, 类似于求解a*x+b*y=c,r=gcd(a,b),当c%r==0时有解,用exgcd求出a*x+b*y=gcd(a,b)的解,然后x*c/gcd(a,b ...
- 32-THREE.JS 球体
<!DOCTYPE html> <html> <head> <title>Example 05.05 - Basic 3D geometries - S ...
- LeetCode OJ:Majority Element(主要元素)
Given an array of size n, find the majority element. The majority element is the element that appear ...
- react-router-dom: 重定向默认路由
<appLayout> <Switch> <Route path='/' exact render={()=> ( <Redirect to={this.ge ...
- Android 应用程序窗体显示状态操作(requestWindowFeature()的应用)
我们在开发程序是经常会需要软件全屏显示.自定义标题(使用按钮等控件)和其他的需求,今天这一讲就是如何控制Android应用程序的窗体显示. 首先介绍一个重要方法那就是requestWindowF ...