• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 初步介绍MySQL中的集合操作

初步介绍MySQL中的集合操作

作者:杨国栋 字体:[增加 减小] 来源:互联网 时间:2017-05-11

杨国栋通过本文主要向大家介绍了mysql 集合,mysql 集合查询,mysql 集合类型,mysql集合操作,mysql 集合函数等相关知识,希望本文的分享对您有所帮助

啥是集合操作?

通常来说,将联接操作看作是表之间的水平操作,因为该操作生成的虚拟表包含两个表中的列。而我这里总结的集合操作,一般将这些操作看作是垂直操作。MySQL数据库支持两种集合操作:UNION DISTINCT和UNION ALL。

与联接操作一样,集合操作也是对两个输入进行操作,并生成一个虚拟表。在联接操作中,一般把输入表称为左输入和右输入。集合操作的两个输入必须拥有相同的列数,若数据类型不同,MySQL数据库自动将进行隐式转换。同时,结果列的名称由左输入决定。
前期准备

准备测试表table1和table2:

create table table1 
      (aid int not null auto_increment, 
      title varchar(20), 
      tag varchar(10), 
      primary key(aid)) 
      engine=innodb default charset=utf8;

create table table2 
      (bid int not null auto_increment, 
      title varchar(20), 
      tag varchar(10), 
      primary key(bid)) 
      engine=innodb default charset=utf8;

</div>

插入以下测试数据:

insert into table1(aid, title, tag) values(1, 'article1', 'MySQL');
insert into table1(aid, title, tag) values(2, 'article2', 'PHP');
insert into table1(aid, title, tag) values(3, 'article3', 'CPP');

insert into table2(bid, title, tag) values(1, 'article1', 'MySQL');
insert into table2(bid, title, tag) values(2, 'article2', 'CPP');
insert into table2(bid, title, tag) values(3, 'article3', 'C');

</div>

UNION DISTINCT

UNION DISTINCT组合两个输入,并应用DISTINCT过滤重复项,一般可以直接省略DISTINCT关键字,直接使用UNION。</div>

UNION的语法如下:

SELECT column,... FROM table1 
UNION [ALL]
SELECT column,... FROM table2
...

</div>

在多个SELECT语句中,对应的列应该具有相同的字段属性,且第一个SELECT语句中被使用的字段名称也被用于结果的字段名称。

现在我运行以下sql语句:

(select * from table1) union (select * from table2);

</div>

将会得到以下结果:

+-----+----------+-------+
| aid | title  | tag  |
+-----+----------+-------+
|  1 | article1 | MySQL |
|  2 | article2 | PHP  |
|  3 | article3 | CPP  |
|  2 | article2 | CPP  |
|  3 | article3 | C   |
+-----+----------+-------+

</div>

我们发现,表table1和表table2中的重复数据项:

|  1 | article1 | MySQL |

</div>

只出现了一次,这就是UNION的作用效果。

MySQL数据库目前对UNION DISTINCT的实现方式如下:

  •     创建一张临时表,也就是虚拟表;
  •     对这张临时表的列添加唯一索引;
  •     将输入的数据插入临时表;
  •     返回虚拟表。

因为添加了唯一索引,所以可以过滤掉集合中重复的数据项。这里重复的意思是SELECT所选的字段完全相同时,才会算作是重复的。

UNION ALL

UNION ALL的意思是不会排除掉重复的数据项,比如我运行以下的sql语句:</div>
(select * from table1) union all (select * from table2);

</div>

你将会得到以下结果:

+-----+----------+-------+
| aid | title  | tag  |
+-----+----------+-------+
|  1 | article1 | MySQL |
|  2 | article2 | PHP  |
|  3 | article3 | CPP  |
|  1 | article1 | MySQL |
|  2 | article2 | CPP  |
|  3 | article3 | C   |
+-----+----------+-------+

</div>

发现重复的数据并不会被筛选掉。

在使用UNION DISTINCT的时候,由于向临时表中添加了唯一索引,插入的速度显然会因此而受到影响。如果确认进行UNION操作的两个集合中没有重复的选项,最有效的办法应该是使用UNION ALL。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 初步介绍MySQL中的集合操作

相关文章

  • 2018-12-05mysql 5.7版本是怎么修改密码的?
  • 2018-12-05MongoDB的三层操作
  • 2018-12-05为什么使用mysql储存过程?mysql储存过程简介
  • 2017-05-11解决mysql不能插入中文Incorrect string value
  • 2018-12-05SQL 提权 常用命令
  • 2017-05-11Windows下使用Cygwin编译MySQL客户端
  • 2018-12-05SQLserver 实现分组统计查询(按月、小时分组)
  • 2018-12-05查询表名中的数据详解
  • 2018-12-05对MySQL的初步了解
  • 2017-05-11修改MYSQL密码的几种常用方法总结

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 25行实现mysql树查询代码详解
    • Oracle DBA常用语句第1/2页
    • Win2008中SqlServer2008 无法打开错误日志文件导致无法启动的解
    • MYSQL中常用的强制性操作(例如强制索引)
    • mysql 分页优化解析
    • mysql进阶(二十三)数据库事务四大特性
    • mysql sql存储过程条件定义与处理
    • sqlserver 2000中创建用户的图文方法
    • MySQL 8.0.2复制新特性的详细介绍
    • PL/SQL实现Oracle数据库任务调度

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有