Mysql只Union用法

MYSQL中的UNIONmysql

UNION在进行表连接后会筛选掉重复的记录,因此在表连接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。sql

举例说明:数据库

select * from table1 union select * from table2函数

这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,若是表数据量大的话可能会致使用磁盘进行排序。  排序

MySQL中的UNION ALL
UNION ALL只是简单的将两个结果合并后就返回。这样,若是返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。字符串

举例说明:hash

select * from table1 union all select * from table2

注: 使用 UNION 时 前一个 select column的个数要等于后一个select column的个数
如: table1: (id,createDate,lastUpdateDate,desc,num,hashCode),
     table2: (id,createDate,lastUpdateDate,desc)io

若是如今使用: select * from table1 UNION ALL select * from table2 则是不会成功的, 数据库为报: 
Error
The used SELECT statements have a different number of columnstable

这是提示查询的两张表的字段不统一,若是table1比table2的字段内容多,能够使用空字符串来代替ast

 

select id,createDate,lastUpdateDate,desc,num,hashCode from table1 UNION ALL select id,createDate,lastUpdateDate,desc,'','' from table2 

若是里面有不想要的,千万要记住前面查询内容要和后面查询内容的字段个数要同样,前面你查询4个,后面也要相应的放4个,这样就不会提示参数数量不一样的错误了。mysql中UNION ALL用法 - 小桃子 - 小桃子

 

其实稍稍修改一下就能够了
对于 'select id,createDate,desc,hasCode from table1' 能够任意选择4个field

 

从效率上说,UNION ALL 要比UNION快不少,因此,若是能够确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。

 

若是遇到两张表数据不一样来集合查询,能够使用union all这个函数进行操做

SELECT COUNT(c.a)  FROM (
(SELECT UID a,ID,SERIAL,ParkName,CardNO,ScoreRealPay,PayFlag,PayType,Createtime FROM cp_consumption_record WHERE UID=761 AND PayFlag=1  ORDER BY Createtime DESC) UNION ALL (SELECT UID a,CpResID,CpParkID,ParkSERIAL,CarCode,Price,BusinessType,CardNO,CreateDate FROM cp_reservation WHERE UID=761 AND BusinessType IN(1,2,3) ORDER BY CreateDate DESC)
) c

这是查询结果集共有多少条数据,

若是还有查询条件,直接在c后面添加就能够,好比按照时间进行查询

SELECT c.UID,c.ScoreRealPay,c.PayFlag,c.PayType  FROM (
(SELECT UID AS UID,ID AS ID,SERIAL AS SERIAL ,ParkName AS ParkName,CardNO CardNO,ScoreRealPay ScoreRealPay,PayFlag PayFlag,PayType PayType,Createtime Createtime FROM cp_consumption_record WHERE UID=761 AND PayFlag=1  ORDER BY Createtime DESC) UNION ALL (SELECT UID a,CpResID,CpParkID,ParkSERIAL,CarCode,Price,BusinessType,CardNO,CreateDate FROM cp_reservation WHERE UID=761 AND BusinessType IN(1,2,3) ORDER BY CreateDate DESC)
) c ORDER BY Createtime DESC/ASC

这里强调一下,你要按照什么样的条件进行查询时,要分别在select子查询中添加上条件,最后在按照统一的时间倒序或者正序

注: 缺省的状况下,UNION 子句不返回重复的记录.若是想显示全部记录,能够加ALL选项 UNION运算要求查询具备相同数目的字段.可是,字段数据类型没必要相同. 

相关文章
相关标签/搜索