zoukankan      html  css  js  c++  java
  • Oracle中Union 和 Union All

    简述

    在Oracle中,Union 和 Union All 都是可以将两条查询结果连接起来集合操作(Set Operation),但使用时要注意区分,以免发生数据错误。今天在将两个结果拼在一起时,发现单独执行时结果A 中有169条,结果B有0条,但union 之后却变成160 条了。原来是使用union的时候会将结果去重。

    Union

    Union 是将两条select 语句的结果集合并,并且排序后去除重复数据,所以使用union 之后的结果是排过序的。

    SELECT * FROM table_A
    UNION
    SELECT * FROM table_B;

    Union All

    Union All 和 Union 不同,是直接将两个结果集合并,不排序,不去重。所以,Union All 的速度比 Union 更快。

    SELECT * FROM table_A
    UNION ALL
    SELECT * FROM table_B;

    Union 条件

    两条 select语句返回的字段数和数据类型要求一致。

    如果字段为字符(character)类型,则合并后返回值类型如下:

    1. 如果两个字段的数据类型是 CHAR类型且长度相同,则返回值类型也为此长度的 CHAR类型;如果都是 CHAR类型,但是长度不一致,则返回值类型为 VARCHAR2,长度取二者中长的一个;
    2. 如果有一个或者两个字段都是 VARCHAR2类型,则返回值的数据类型为 VARCHAR2。

    如果字段为数值(numeric)类型,则返回值类型决定于以下优先原则(Numeric Precedence):

    1. 如果任意一个的数据类型为 BINARY_DOUBLE,则返回值的类型为 BINARY_DOUBLE;
    2. 如果没有 BINARY_DOUBLE类型,但存在任意一个类型为 BINARY_FLOAT,则返回值类型为 BINARY_FLOAT;
    3. 如果都是 NUMBER类型,则返回值类型为 NUMBER。

    在集合操作中,Oracle不会自动转换类型,所以当两个需要合并的字段分别为character data 和 numeric data 时,Oracle会报错。

    参考资料

  • 相关阅读:
    html 一号店静态页面
    多线程
    TCP通信
    MySQL连接查询
    Mysql数据库 DDL 数据定义语言
    MySQL数据库 DML 数据操作语言
    java字符流
    java File类
    java变量
    JDK、JRE、JVM的关系
  • 原文地址:https://www.cnblogs.com/yuxiaoqi/p/3782719.html
Copyright © 2011-2022 走看看