Union all的使用实现一条sql把不同表里面的数据查出来,或者按照不同的查询条件查出来的sql累加起来

时间:2022-01-31 19:55:13

Union all的使用实现一条sql把不同表里面的数据查出来,或者按照不同的查询条件查出来的sql累加起来,如果不用union all我们只能通过程序去实现,而且需要多次和数据库的交互查询,效率低。

案例一:

从不同的表里面把字段名意义相同,但是名字不同的表的查询数据一起显示出来,

SELECT C_FUNC_ID, C_MODULE,  TRX_AMT  FROM (SELECT C_FUNC_ID AS C_FUNC_ID, C_MODULEAS C_MODULE,LC_AMT ASTRX_AMT FROM t able1  WHERE C_MAIN_REF='IPLCXXXX' ORDER BYI_EVENT_TIME)

 

UNION ALL

 

SELECT C_FUNC_ID, C_MODULE, TRX_AMTFROM  (SELECT C_FUNC_ID AS C_FUNC_ID, C_MODULE ASC_MODULE,GTEE_AMT AS TRX_AMT FROM table2 WHERE C_IPLC_MAIN_REF='IPLCXXXX'ORDER BY I_EVENT_TIME)


案例二:

把一张表里面根据不同的条件,不同的排序规则进行查询数据

select D_LOGIN_TIME from (
select D_LOGIN_TIME from table1   where D_LOGIN_TIME >TO_DATE('2012-05-03','YYYY-MM-DD') ORDER BY D_LOGIN_TIME-SYSDATE DESC) union all 
select D_LOGIN_TIME from (
select D_LOGIN_TIME from table1 where  D_LOGIN_TIME <TO_DATE('2012-05-03','YYYY-MM-DD')   ORDER BY D_LOGIN_TIME DESC);

需要注意的是:

Union和Union All的区别之一在于对重复结果的处理。

对于UNION来说,交换两个SELECT语句的顺序后结果仍然是一样的,这是因为UNION会自动排序。而UNION ALL在交换了SELECT语句的顺序后结果则不相同,因为UNION ALL不会对结果自动进行排序。