mysql union all用法,mysql中union和union all的区别

mysql union all用法,mysql中union和union all的区别,MySQL中UNION与UNION ALL的基本使用方法

本文主要介绍了MySQL中UNION和UNION ALL的基本使用方法。通过示例代码非常详细,对大家学习或使用MySQL有一定的参考价值。有需要的话一起学吧。

在数据库中,UNION和UNION ALL关键字都是将两个结果合二为一,但在使用和效率上是不同的。

MySQL中的UNION

UNION会在表链接后过滤掉重复的记录,所以它会在表链接后对结果集进行排序,删除重复的记录,然后返回结果。在大多数实际应用中,没有重复记录,最常见的是进程表和历史表的并集。比如:

select * from GC _ dfys union select * from ls _ jg _ dfys

运行时,这个SQL取出两个表的结果,然后用排序空间进行排序,删除重复记录,最后返回结果集。如果表的数据量很大,可能会导致按磁盘排序。

MySQL中的UNION ALL

UNION ALL只是将两个结果组合起来并返回它们。这样,如果两个返回的结果集包含重复数据,则返回的结果集将包含重复数据。

就效率而言,UNION ALL比UNION快得多,因此如果您可以确认两个合并的结果集不包含重复的数据,则使用UNION ALL,如下所示:

select * from GC _ dfys union all select * from ls _ jg _ dfys

使用Union,所有返回的行都是唯一的,就像对整个结果集使用DISTINCT一样。如果多个表的查询结果中有完全一致的数据,mysql会自动复制。

使用Union all,所有行都不会重复,所有行都将被返回。

如果要使用ORDER BY或LIMIT子句对所有联合结果进行分类或限制;您应该将单个SELECT语句括起来,并将ORDER BY或limit放在最后一个语句之后:

(从tbl_name中选择a,其中a=10,B=1)

联盟

(从tbl_name中选择a,其中a=11,B=2)

按极限10排序;

麻烦也可以这样做:

从以下位置选择用户id(

从testa union all中选择userid

order by userid限制0,1。

在条款中。Order by只有在与limit一起使用时才有意义。如果不一起用,解析器优化的时候会去掉。

如果仍然要分组,并且有条件,那么:

select userid from(select userid from testa union all select userid from testb)t group by userid count(userid)=2;

注意:union的括号后面必须有一个单独的名称,否则将会报告错误。

当然,如果有几个union表的数据量很大,建议先导出文本,然后用脚本执行。

因为纯粹用sql会效率很低,而且会写临时文件。如果您的磁盘空间不够大,您可能会出错。

写入文件“/tmp/MYLsivgK”时出错(错误代码:28)

示例:

如果存在,则删除表` ta `;

创建表` ta `(

` id varchar(255)默认为NULL,

` num int(11)默认为空

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

- -

-助教的记录

- -

插入 ta 值( a , 5 );

插入 ta 值( b , 10 );

插入 ta 值( c , 15 );

插入 ta 值( d , 10 );

- -

-" TB "的表格结构

- -

如果存在“tb ”,则删除表;

创建表“tb ”(

` id varchar(255)默认为NULL,

` num int(11)默认为空

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

- -

结核病的记录

- -

插入“tb”值(“b”、“5”);

插入“tb”值(“c”,“15”);

插入到“tb”值中(“d”,“20”);

插入到“tb”值中(“e”、“99”);

此时,对应于ta tb的c字段的num是相同的。

sql:

SELECT id,SUM(num) FROM(

SELECT * FROM ta

联合所有

SELECT * FROM tb)作为tmp

按id分组

运行结果:

如果:

SELECT id,SUM(num) FROM(

SELECT * FROM ta

联盟

SELECT * FROM tb)作为tmp

按id分组

运行结果:

使用Union,所有返回的行都是唯一的,就像对整个结果集使用DISTINCT一样。如果多个表的查询结果中有完全一致的数据,mysql会自动复制。

使用Union all,所有行都不会重复,所有行都将被返回。

总结

这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。谢谢你的支持。

mysql union all用法,mysql中union和union all的区别