TABLE AA
ID NAME
1  猪八戒
2  孙悟空
TABLE BB
ID NAME
1  猪八戒
2  沙和尚
3  唐僧SELECT ID,NAME FROM AA
UNION
SELECT ID,NAME FROM BB;得
ID NAME
1  猪八戒
2  孙悟空
2  沙和尚
3  唐僧

SELECT ID,NAME FROM AA
UNION ALL
SELECT ID,NAME FROM BB;得
1  猪八戒
2  孙悟空
1  猪八戒
2  沙和尚
3  唐僧
一个是UNION, 另一个是UNION ALL, 不一样的,看一下SELECT的结果
就知道了,就这些。

解决方案 »

  1.   

    从N个表中取出记录,这些记录对应的位置要有相同的类型,当然了,能Union的,肯定是有类似关系的。
    比如说:有12张表记录一个用户的每月话费清单,要查询这个用户的一年话费情况,就可以采用Union方式检索出来!你体会一下吧!
      

  2.   

    union all/union的用处是把多个相同结构的纪录集相加返回一个纪录集, union all和union的区别在于union会自动过滤掉结果集中重复的纪录,相当于对union all以后的纪录集进行一次DISTINCT操作.
    下面是一个简单的例子:SQL> create table t1 (col1 varchar2(10));
    Table created.SQL> create table t2 (col2 varchar2(10));
    Table created.SQL> insert into t1 values ('A');
    1 row created.SQL> insert into t2 values ('B');
    1 row created.SQL> insert into t1 values ('B');
    1 row created.SQL> select * from t1;
    COL1
    ----------
    A
    BSQL> select * from t2;
    COL2
    ----------
    BSQL> select * from t1
      2  union all 
      3  select * from t2;
    COL1
    ----------
    A
    B
    BSQL> select * from t1
      2  union 
      3  select * from t2;
    COL1
    ----------
    A
    B
      

  3.   

    union就是加的意思,要保证union前后的的查询结果相匹配.
    例如:select a,b,c from aa union select a,b from aa;是错误的;
    只要类型、位置和个数都一样才可以用union.
      

  4.   

    再俗点说,union就是从多个表中查询,但在select语句的相同位置的数据类型必须一致。如果某个表没有需要的字段,可以用0或null,查询字段要用别名保持一致。union/union all前面说的很详细了,不再重复。
      

  5.   

    感谢上面的哥们,还有就是……
    SELECT '',9,'上期结转',SUM(a),SUM(b),SUM(c),SUM(d),SUM(e),
    SUM(f),0 FROM table1 
    WHERE SUBSTR(BM,1,4)='1001' 
    UNION SELECT BM,month,'本年累计',A,B,C,D,E,F,1 
    FROM table2 WHERE month BETWEEN 9 AND 10 AND BM ='1001'第一条select 语句中的“0”是一个排序号,是table1里面没有的字段
    是由sql语句增加的一列,这种用法还请说明一下……
      

  6.   

    take care :
       Union will request sorting action and it takes additional memory (sort area size) ,while Union all is different .
      

  7.   

    SELECT '',9,'上期结转',SUM(a),SUM(b),SUM(c),SUM(d),SUM(e),
    SUM(f),0 FROM table1 
    WHERE SUBSTR(BM,1,4)='1001' 
    UNION SELECT BM,month,'本年累计',A,B,C,D,E,F,1 
    FROM table2 WHERE month BETWEEN 9 AND 10 AND BM ='1001'没有问题,可以这样增加,就象qiuyang_wang(小数点) 的select a,b,c from aa union select a,b from aa,那样,可以在第二个语句种添加一个数据类型和另外一张表的字段一样的值,比如字符可以用‘k’,数字用3等,具体就是select a,b,c from aa union select a,b,'k' as c from aa;那就可以了。