UNION和UNION ALL之间的区别是什么?
当前回答
UNION删除重复的记录(结果中的所有列都相同),UNION all不删除。
当使用UNION而不是UNION ALL时,性能会受到影响,因为数据库服务器必须做额外的工作来删除重复的行,但通常您不希望重复的行(尤其是在开发报表时)。
要识别重复项,记录必须是可比较类型以及兼容类型。这取决于SQL系统。例如,系统可以截断所有长文本字段以生成短文本字段进行比较(MS Jet),或者可以拒绝比较二进制字段(ORACLE)
UNION示例:
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
结果:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
UNION ALL示例:
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
结果:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
其他回答
如果没有ORDERBY,UNION ALL可能会按原样返回行,而UNION则会让您等到查询的最后一刻,然后立即向您提供整个结果集。这在超时情况下会有所不同——UNION ALL会保持连接的活动状态。
因此,如果您有超时问题,并且没有排序,重复也不是问题,UNION ALL可能会非常有用。
UNION将两个结构兼容的表的内容合并为一个组合表。
差异:
UNION和UNION ALL的区别在于UNION将省略重复记录,而UNION ALL将包含重复记录。
联合结果集按升序排序,而联合所有结果集不排序
UNION对其结果集执行DISTINCT,以便消除任何重复的行。而UNION ALL不会删除重复项,因此它比UNION更快*
注意:UNION ALL的性能通常会优于UNION,因为UNION需要服务器执行删除任何重复项的额外工作。因此,如果确定不会有任何重复项,或者有重复项不是问题,出于性能原因,建议使用UNION ALL。
UNION和UNION ALL之间的基本区别是联合操作从结果集中消除了重复的行,但联合ALL在合并后返回所有行。
从…起http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
UNION删除重复的记录(结果中的所有列都相同),UNION all不删除。
当使用UNION而不是UNION ALL时,性能会受到影响,因为数据库服务器必须做额外的工作来删除重复的行,但通常您不希望重复的行(尤其是在开发报表时)。
要识别重复项,记录必须是可比较类型以及兼容类型。这取决于SQL系统。例如,系统可以截断所有长文本字段以生成短文本字段进行比较(MS Jet),或者可以拒绝比较二进制字段(ORACLE)
UNION示例:
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
结果:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
UNION ALL示例:
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
结果:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
UNION会删除重复记录,而UNION ALL则不会。但是需要检查要处理的大量数据,并且列和数据类型必须相同。
由于union内部使用“不同”行为来选择行,因此在时间和性能方面成本更高。喜欢
select project_id from t_project
union
select project_id from t_project_contact
这给了我2020年的记录
另一方面
select project_id from t_project
union all
select project_id from t_project_contact
给我超过17402行
从优先级角度看,两者具有相同的优先级。
推荐文章
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- 查询JSON类型内的数组元素
- 确定记录是否存在的最快方法
- 获得PostgreSQL数据库中当前连接数的正确查询
- 在SQL选择语句Order By 1的目的是什么?
- 我如何循环通过一组记录在SQL Server?
- 如何从命令行通过mysql运行一个查询?
- 外键约束可能导致循环或多条级联路径?
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何选择每一行的列值不是独特的
- 如何改变字符集(和排序)在整个数据库?
- mySQL:: insert到表,数据从另一个表?
- 如何在Postgres中获得两个字段的MIN() ?