SQLShack (日本語)

0 Comments

この記事では、SQL Union演算子について深く掘り下げ、その多くの使用方法を例とともに説明し、UnionとUnion Allの違いなどのよくある質問をいくつか紹介します。

現実のデータ要件に対処するには、データ分析を行ったり、新しいデータセットを作成したりできるように、複数のデータソースからの結果セットを組み合 データセットは同じですが、異なるテーブルを参照する可能性があります。, 単一のクエリでデータを結合する方法はありますか? Set演算子は実行可能なオプションですか? これらの共通の課題に対処するために、既存のオペレーターのいくつかをどのように使用できるかを見てみましょう。,n Vs Union All

  • SQL演算子の構文
  • selectステートメントでの単純なSQL Union句の使用方法
  • WHERE句を持つクエリでSQL Unionを使用する方法
  • UnionでSELECT INTO句を使用する方法
  • WHERE句とorder by句を持つクエリでSQL Unionを使用する方法
  • SQL UnionおよびSQL Pivotを使用する方法GROUP句およびHAVING句でSQL Unionを使用する方法
  • SQL UnionおよびSQL Pivotを使用する方法GROUP句およびHAVING句でSQL Unionを使用する方法
  • li>

    演算子

    演算子は、selectステートメント内の一つ以上の式に対して実行されるアクションを定義するシンボルまたはキーワードです。,

    Set Operator

    SQL ServerのSet演算子の詳細とその使用方法について説明します。

    SQL Serverには四つの基本的なSet演算子があります。

    1. Union
    2. Union All
    3. EXCEPT
    4. INTERSECT

    Union

    Union演算子は、複数のクエリの結果を組み合わせて、それぞれのクエリの結果を個別の単一の結果セットに組み合わせます。union内のすべてのクエリに属するすべての行が含まれます。 この操作では、さらに二つのクエリを結合し、重複を削除します。,

    たとえば、テーブル’A’には1,2と3があり、テーブル’B’には3,4,5があります。,

    ユニオン
    選択2
    ユニオン
    選択3
    )
    ユニオン
    (
    選択3
    ユニオン
    選択4
    ユニオン
    選択5
    );
  • 出力では、二つの結果セットからレコードの明確なリストを見ることができます

    union ALL

    union vs union allを見ると、それらは非常に似ていますが、パフォーマンス結果の観点からいくつかの重要な違いがあります。,

    Union演算子は、複数のクエリの結果を、Union内のすべてのクエリに属するすべての行を含む単一の結果セットに結合します。 簡単に言えば、二つ以上の行セットを結合し、重複を保持します。

    たとえば、テーブル’A’には1,2と3があり、テーブル’B’には3,4,5があります。,iv>

    7
    8
    9
    10
    11
    12
    13
    14
    15
    (
    SELECT1ID
    UNION
    選択2
    ユニオン
    選択3
    )
    ユニオンすべて
    (
    選択3
    ユニオン
    選択4
    ユニオン
    選択5
    );

    出力には、繰り返しレコードを含むすべての行も表示できます。,>4

    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    (
    選択1id
    ユニオン
    選択2
    ユニオン
    選択3
    )
    それぞれ交差
    (
    選択3
    ユニオン
    選択4
    ユニオン
    選択5
    );

    行’3’は二つの結果セットの間で共通です。,

    EXCEPT

    EXCEPT演算子は、最初の行のうち二番目の行ではない行をリストします。,/div>

    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    (
    選択1
    ユニオン
    選択2
    ユニオン
    選択3
    )
    除く
    (
    選択3b
    ユニオン
    選択4
    ユニオン
    選択5
    );

    名前をリストします-最初のセットからの共通行。,

    注:各テーブルが交差する形状で表されるベン図を使用して集合演算子を視覚化するのは非常に簡単です。 テーブルが重なっているシェイプの交点は、条件が満たされている行です。,各問合せで定義されるolumnは、同じ順序を持つ必要があります

  • 後続のSQL文の行セットは、最初の問合せのデータ型と一致する必要があります
  • 括弧は、同じ文で他のセット演算子を構築することができます
  • ORDER BY句を持つことができますが、それはSQLの最後の文である必要があります
  • GROUP BY句とHAVING句は、個々の問合せに適用することができます
  • 注:

    1. これらのすべてのセット演算子を使用することができます。演算子は重複を削除しますが、union all演算子を除きます。
    2. 出力列名は最初のクエリiから参照されます。,E.SelectステートメントをSet演算子のいずれかで実行し、各クエリの結果セットには異なる列名がある可能性があるため、SELECTステートメントの結果は操作の最初のクエリの列名を参照します。
    3. SQL結合は、複数の関連テーブルの列を結合するのに対して、SET演算子は複数のテーブルの行を結合することがよくあります。,
    4. 式の型が同じで精度、スケール、または長さが異なる場合、結果は式の組み合わせに関する同じ規則に基づいて決定されます

    例:

    次のT-SQLクエリが準備され、Adventureworks2014データベースに対して実行されます。 AdventireWorks2014データベースのサンプルはこちらからダウンロードできます

    1. selectステートメントで単純なSQL Union句を使用する方法

      この例では、結果セットには最初のセットと二番目のセットからの別個の行セットが含まれています。,次の例は、ルール1,3&5に基づいています。,

    選択1
    ユニオン
    選択2
    ユニオン
    選択3
    )
    ユニオン
    (
    選択3B
    ユニオン
    選択4
    ユニオン
    選択5
    )
    ユニオンすべて
    (
    select8c
    union
    select9
    union
    select1
    )
    )t;

    出力は、ユニオンとユニオンの組み合わせです括弧を使用するすべての演算子。,

  • WHERE句を持つクエリでSQL Unionを使用する方法

    次の例は、WHERE句とORDER BY句を持つ二つのSELECT文でUnionを使用する方法を示しています。,

    The following example is based on the rule 1,2 and 3

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    SELECT P1.ProductModelID,
    P1.Name
    FROM Production.ProductModel P1
    WHERE ProductModelID IN(3, 4)
    UNION
    SELECT P2.ProductModelID,
    P2.,本番環境からの名前
    。ProductModel P2
    ここでP2。ProductModelID IN(3,4)
    ORDER BY P1.Name;

  • SQL UnionでSELECT INTO句を使用する方法

    次の例では、新しいdboを作成します。二つの異なる結果セットからの列ProductModelとnameの和集合の最終結果セットを保持する最初のSELECTステートメントでINTO句を使用するダミーテーブル。, この場合、同じテーブルから派生しますが、現実の状況では、これは二つの異なるテーブルにすることもできます。 次の例は、ルール1、2、および4に基づいています。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    存在する場合はテーブルをドロップしますdbo。,dummy;
    SELECT P1.ProductModelID,
    P1.Name
    INTO dummy
    FROM Production.ProductModel P1
    WHERE ProductModelID IN(3, 4)
    UNION
    SELECT P2.ProductModelID,
    P2.Name
    FROM Production.ProductModel P2
    WHERE P2.ProductModelID IN(3, 4)
    ORDER BY P1.Name;
    GO
    SELECT *
    FROM dbo.,ダミー;

  • WHERE句とORDER BY句を持つクエリでSQL Unionを使用する方法

    これは、Union演算子のすべてのselectステートメントでTOP関数または集計関数を使用する場合にのみ可能です

    これは、Union演算子のすべてのselectステートメントでTOP関数または集計関数を使用する場合にのみ可能です—– この場合、各結果セットから上位10行がリストされ、Union句を使用して行を結合して最終結果を取得します。 また、order by句がすべてのselectステートメントに配置されていることもわかります。,

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    選択します。モデルid,
    インクルードします。,Name
    FROM
    (
    SELECT TOP 10 ProductModelID ModelID,
    Name
    FROM Production.ProductModel
    WHERE ProductModelID NOT IN(3, 4)
    ORDER BY Name DESC
    ) a
    UNION
    SELECT b.ProductModelID,
    b.Name
    FROM
    (
    SELECT TOP 10 ProductModelID,
    Name
    FROM Production.,ProductModel
    Where ProductModelID IN(5,6)
    ORDER BY Name DESC
    )b;

  • どのように次の例では、sql unionおよびsql pivotを使用するために、複数の結果セットを結合しようとしています。 実際の状況では、さまざまな地域または部門の財務番号があり、テーブルの列とデータ型は同じですが、それらを単一の行セットと単一のレポートに入れ, このようなシナリオでは、Union句を使用すると、結果を結合してデータをより意味のあるレポートに変換するのが非常に簡単です。

    この例では、ProductModelはTop10、Top100、Top100に分類され、行を集計された値のセットとしてそれぞれの列に変換します。 次の例は、ルール2に基づいています。,/div>

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    最大(top10)top10,
    最大(top100)top100,
    最大(top1000)top100
    から
    (
    カウントを選択します(*)top10,
    0top100,
    0top1000
    生産から。,ProductModel
    WHERE ProductModelID < 10
    UNION
    SELECT 0,
    COUNT(*),
    0
    FROM Production.ProductModel
    WHERE ProductModelID > 11
    AND ProductModelID < 100
    UNION
    SELECT 0,
    0,
    COUNT(*)
    FROM Production.,ProductModel
    WHERE ProductModelID>101
    )T;
  • NULL値は、セット演算子では非常に重要であり、セカンドクラスのデータベース市民として扱われます。 Nullは一意であると見なされ、同じ列にNULLがある場合、それらは同一と見なされるため、その場合、実際にNULLをNULLと比較して等価性を取得します。 次の例では、NULL値の使用を参照してください。 この場合、集計関数maxで操作されます。,

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    最大(top10)top10、
    最大(top100)top100、
    最大(top1000)top100
    から
    カウントを選択します(*)top10、
    null top100、
    null top1000
    生産から。,ProductModel
    WHERE ProductModelID < 10
    UNION
    SELECT NULL,
    COUNT(*),
    NULL
    FROM Production.ProductModel
    WHERE ProductModelID > 11
    AND ProductModelID < 100
    UNION
    SELECT NULL,
    NULL,
    COUNT(*)
    FROM Production.,ProductModel
    Where ProductModelID>101
    )T;

    2groupおよびhaving句でsql unionを使用する方法

    次の例では、union演算子を使用して、group byおよびHaving句を使用して条件句が定義されているすべてのテーブルの結

    姓は、having句で条件を指定することによって解析されます。

    次の例はルール5に基づいています。,

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ppを選択します。lastname,
    COUNT(*)repeatedtwice,
    0Repeatedthrice
    ユーザーから。PpとしてのPerson
    ヒューマンリソースに参加します。従業員としてe ON e.BusinessEntityID=pp.,BusinessEntityID
    ppによるグループ化。姓
    持つCOUNT(*)=2
    ユニオン
    ppを選択します。姓、
    0、
    カウント(*)NtoZRange
    人から。PpとしてのPerson
    ヒューマンリソースに参加します。従業員としてe ON e.BusinessEntityID=pp.BusinessEntityID
    ppによるグループ化。,LastName
    HAVING COUNT(*)>2;

    姓は共用体演算子を使用して二つの異なる列に派生していることがわかります

    これですべてです…

    概要

    これまでのところ、set演算子を使用し、いつ使用するかを理解するために、利用可能なさまざまなオプション UnionとUnion Allを使用するかどうかを決定するときには、考慮すべき点がいくつかあります。, 複数のクエリからの結果セットが重複または重複を生成しないことがわかっている場合は、Union Allを使用してください。 出力をピボットして変換することもできます。

    データ型が一致していることを確認し、ORDER BYを実行する必要がある場合は、これらのセットクエリをすべて実行した後、最後に実行してください。 本質的に、UnionとUnion Allに関しては、Union AllはUnionよりも高速です。Union演算子は重複を排除するために追加のオーバーヘッドが発生するためです。

    私はあなたがSQL共用体演算子に関するこの記事を楽しんだことを願っています。, 以下のコメントで質問をすること自由に感じなさい。

    • 著者
    • 最近の投稿
    私は11年以上の豊富な手を持つデータベース技術者です。データベース技術の経験について。 私はマイクロソフト認定プロとコンピュータアプリケーションのマスターの学位を
    私の専門は、設計にあります&高可用性ソリューションとクロスプラットフォームDB移行を実装します。, 現在取り組んでいるテクノロジは、SQL Server、PowerShell、Oracle、MongoDBです。,
    Prashanth Jayaramによるすべての投稿を表示
    Prashanth Jayaramによる最新の投稿(すべて参照)
    • SQLにおけるデータベース監査の概要-January28,2021
    • Azure SQLデータベースとオンプレミス間のAzureデータ同期sql server-January20,2021
    • powershellを使用してazure sql databaseのインポート/エクスポート操作を実行する方法-january14,2021

    <


    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です