sql >> データベース >  >> RDS >> Oracle

OracleUNIONオペレーターの説明

    Oracle Databaseでは、UNION 演算子を使用すると、2つのクエリの結果を1つの結果セットに結合できます。

    次のテーブルがあるとします。

    SELECT * FROM Teachers;
    SELECT * FROM Students;

    結果:

    TEACHERID TEACHERNAME
    1 ウォーレン
    2 ベン
    3 キャシー
    4 キャシー
    5 請求書
    6 請求書
    STUDENTID 学生名
    1 フェイ
    2 ジェット
    3 スパイク
    4 アイン
    5 ウォーレン
    6 請求書

    UNIONの使用例を次に示します。 すべての教師と生徒の名前を返す演算子:

    SELECT TeacherName FROM Teachers
    UNION
    SELECT StudentName FROM Students;

    結果:

    TEACHERNAME
    ベン
    請求書
    キャシー
    Ein
    フェイ
    ジェット
    スパイク
    ウォーレン

    デフォルトでは、UNION 演算子は暗黙的にDISTINCTを適用します 手術。つまり、デフォルトでは個別の値のみを返します。したがって、上記の結果には、ウォーレン、キャシー、ビルがそれぞれ1つずつ含まれています。これは、結合されたテーブルに実際に2つのウォーレン、2つのキャシー、および3つのビルが含まれているという事実にもかかわらずです(キャシーと呼ばれる2人の教師、ウォーレンと呼ばれる教師と顧客、およびビルと呼ばれる2人、およびビルと呼ばれる1人の学生がいます)。

    重複を含める

    ALLを使用できます 結果に重複する値を含めるキーワード:

    SELECT TeacherName FROM Teachers
    UNION ALL
    SELECT StudentName FROM Students;

    結果:

    TEACHERNAME
    ウォーレン
    ベン
    キャシー
    キャシー
    請求書
    請求書
    フェイ
    ジェット
    スパイク
    Ein
    ウォーレン
    請求書

    今回は、最初の例で取得した8行ではなく、12行を取得しました。

    キャシーの両方が返還され、3つの請求書すべてが返還されたことがわかります。

    覚えておくべきことがいくつかあります

    式の数は一致する必要があり、同じデータ型グループに含まれている必要があることに注意してください。したがって、次のことはできません。

    SELECT TeacherName FROM Teachers
    UNION
    SELECT StudentId, StudentName FROM Students;

    結果:

    ORA-01789: query block has incorrect number of result columns

    またはこれ:

    SELECT TeacherName FROM Teachers
    UNION
    SELECT StudentId FROM Students;

    結果:

    ORA-01790: expression must have same datatype as corresponding expression

    ただし、TO_CHAR()のような関数を使用できます 列を適切なデータ型グループに変換するには:

    SELECT TeacherName FROM Teachers
    UNION
    SELECT TO_CHAR(StudentId) FROM Students;

    結果:

    TEACHERNAME
    1
    2
    3
    4
    5
    6
    Ben
    Bill
    Cathy
    Warren

    1. SQLを使用して連続する日付範囲を検出する

    2. SQLiteOpenHelperクラスを使用してsqliteデータベースからアイテムを削除する方法

    3. Oracleで行を列に動的にピボットする

    4. PostgreSQLの特定のスキーマのデータベースに保存されているすべての関数のリストを取得するにはどうすればよいですか?