OceanBase logo

OceanBase

トランザクション処理、分析、AIワークロードに最適な分散データベース

デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

ドキュメント

会社概要

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

法的情報

お問い合わせ

日本 - 日本語
International - English
中国站 - 简体中文
クラウドで始める

トランザクション処理、分析、AIワークロードに最適な分散データベース

デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

法的情報

お問い合わせ

クラウドで始める
编组
すべての製品
    • データベース
    • アイコンOceanBaseデータベース
アイコン

OceanBaseデータベース

V4.3.5

    OceanBase logo

    AI時代を支える分散データベース

    日本 - 日本語
    International - English
    中国站 - 简体中文
    プロダクト
    OceanBase Cloudエンタープライズ版コミュニティ版OceanBase seekdb
    会社概要
    OceanBaseについて法的情報お問い合わせ
    公式アカウント
    ConnpassXQiitaLumaGitHub

    © OceanBase 2026. All rights reserved

    クラウドサービス契約個人情報保護ポリシーセキュリティ
    お問い合わせ
    ドキュメントフィードバック
    1. ホーム
    2. OceanBaseデータベース
    3. V4.3.5
    アイコンOceanBaseデータベース
    V 4.3.5
    • V 4.3.5

    UNION

    最終更新日:2026-04-09 08:28:49  更新
    シェア
    このページの内容
    UNION ALL
    MERGE UNION DISTINCT
    HASH UNION DISTINCT

    折りたたみ

    シェア

    UNION 演算子は、2つのクエリの結果セットを和集合演算によって結合するために使用されます。

    OceanBaseデータベースがサポートする UNION 演算子には、UNION ALL、HASH UNION DISTINCT、および MERGE UNION DISTINCT が含まれます。

    UNION ALL

    UNION ALLは、2つのクエリ結果セットを直接結合して出力するために使用されます。

    以下の例では、Q1は2つのクエリに対してUNION ALLを使用して結合し、UNION ALL演算子を使用して和集合演算を行います。演算子が実行されると、左右のサブノードのすべての出力結果が順番に出力されます。

    obclient> CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT);
    Query OK, 0 rows affected
    
    obclient> INSERT INTO t1 VALUES(1,1);
    Query OK, 1 rows affected
    
    obclient> INSERT INTO t1 VALUES(2,2);
    Query OK, 1 rows affected
    
    Q1:
    obclient> EXPLAIN SELECT c1 FROM t1 UNION ALL SELECT c2 FROM t1;
    
    Query Plan:
    ====================================
    |ID|OPERATOR   |NAME|EST. ROWS|COST|
    ------------------------------------
    |0 |UNION ALL  |    |4        |74  |
    |1 | TABLE SCAN|T1  |2        |37  |
    |2 | TABLE SCAN|T1  |2        |37  |
    ====================================
    Outputs & filters:
    -------------------------------------
      0 - output([UNION(T1.C1, T1.C2)]), filter(nil)
      1 - output([T1.C1]), filter(nil),
          access([T1.C1]), partitions(p0)
      2 - output([T1.C2]), filter(nil),
          access([T1.C2]), partitions(p0)
    

    上記の例では、実行計画表示のoutputs & filtersにおいて、UNION ALL演算子の出力情報が詳細に示されています。

    情報名 意味
    output この演算子の出力式です。
    filter この演算子上のフィルタ条件です。例ではUNION ALL演算子にfilterが設定されていないため、nilとなります。

    MERGE UNION DISTINCT

    MERGE UNION DISTINCTは、結果セットに対して並合を行い、重複を削除した後に出力するために使用されます。

    以下の例では、Q2が2つのクエリに対してUNION DISTINCTを使用して結合し、c1列にはソート可能なデータがあります。演算子0はMERGE UNION DISTINCTを生成して並合と重複除去を行います。c2列にはソート可能なデータがないため、演算子3にSORT演算子が割り当てられてソートが行われます。演算子の実行時には、左右のサブノードから順序付き入力を読み取り、結合して順序付き出力を得て重複を削除します。

    Q2:
    obclient> EXPLAIN SELECT c1 FROM t1 UNION SELECT c2 FROM t1;
    
    Query Plan:
    =============================================
    |ID|OPERATOR            |NAME|EST. ROWS|COST|
    ---------------------------------------------
    |0 |MERGE UNION DISTINCT|    |4        |77  |
    |1 | TABLE SCAN         |T1  |2        |37  |
    |2 | SORT               |    |2        |39  |
    |3 |  TABLE SCAN        |T1  |2        |37  |
    =============================================
    Outputs & filters:
    -------------------------------------
      0 - output([UNION(T1.C1, T1.C2)]), filter(nil)
      1 - output([T1.C1]), filter(nil),
          access([T1.C1]), partitions(p0)
      2 - output([T1.C2]), filter(nil), sort_keys([T1.C2, ASC])
      3 - output([T1.C2]), filter(nil),
          access([T1.C2]), partitions(p0)
    

    上記の例の実行計画表示におけるoutputs & filtersは、MERGE UNION DISTINCT演算子の出力情報を詳細に示しており、フィールドの意味はUNION ALL演算子と同じです。

    HASH UNION DISTINCT

    HASH UNION DISTINCTは、結果セットに対して並集を行い、重複を削除した後に出力するために使用されます。

    以下の例では、Q3は2つのクエリに対してUNION DISTINCTを使用して結合し、ソートを利用できません。演算子0はHASH UNION DISTINCTを使用して並集と重複削除を行います。演算子の実行時には左右のサブノードから出力を読み取り、ハッシュテーブルを構築して重複を削除し、最終的に重複を削除した結果を出力します。

    Q3:
    obclient> EXPLAIN SELECT c2 FROM t1 UNION SELECT c2 FROM t1;
    
    Query Plan:
    ============================================
    |ID|OPERATOR           |NAME|EST. ROWS|COST|
    --------------------------------------------
    |0 |HASH UNION DISTINCT|    |4        |77  |
    |1 | TABLE SCAN        |T1  |2        |37  |
    |2 | TABLE SCAN        |T1  |2        |37  |
    ============================================
    Outputs & filters:
    -------------------------------------
      0 - output([UNION(T1.C2, T1.C2)]), filter(nil)
      1 - output([T1.C2]), filter(nil),
          access([T1.C2]), partitions(p0)
      2 - output([T1.C2]), filter(nil),
          access([T1.C2]), partitions(p0)
    

    上記の例の実行計画表示におけるoutputs & filtersは、HASH UNION DISTINCT演算子の出力情報を詳細に示しており、フィールドの意味はUNION ALL演算子と同じです。

    前のトピック

    SUBPLAN SCAN
    最後

    次のトピック

    INTERSECT
    次
    このページの内容
    UNION ALL
    MERGE UNION DISTINCT
    HASH UNION DISTINCT