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

MariaDBUNIONオペレーターの説明

    MariaDBでは、UNION 演算子は、複数のSELECTからの結果を結合します ステートメントを単一の結果セットにまとめます。

    構文

    公式の構文は次のようになります:

    SELECT ...
    UNION [ALL | DISTINCT] SELECT ...
    [UNION [ALL | DISTINCT] SELECT ...]
    [ORDER BY [column [, column ...]]]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]

    MariaDB 10.4.0以降、括弧を使用して優先順位を指定できます。

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

    SELECT * FROM Teachers;
    SELECT * FROM Students;

    結果:

    +-----------+-------------+
    | TeacherId | TeacherName |
    +-----------+-------------+
    |         1 | Warren      |
    |         2 | Ben         |
    |         3 | Cathy       |
    |         4 | Cathy       |
    |         5 | Bill        |
    |         6 | Bill        |
    +-----------+-------------+
    
    +-----------+-------------+
    | StudentId | StudentName |
    +-----------+-------------+
    |         1 | Faye        |
    |         2 | Jet         |
    |         3 | Spike       |
    |         4 | Ein         |
    |         5 | Warren      |
    |         6 | Bill        |
    +-----------+-------------+

    UNIONを使用できます すべての教師と生徒を返却するオペレーター:

    SELECT TeacherName FROM Teachers
    UNION
    SELECT StudentName FROM Students;

    結果:

    +-------------+
    | TeacherName |
    +-------------+
    | Warren      |
    | Ben         |
    | Cathy       |
    | Bill        |
    | Faye        |
    | Jet         |
    | Spike       |
    | Ein         |
    +-------------+
    8 rows in set (0.003 sec)

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

    DISTINCTを明示的に使用する例を次に示します。 演算子:

    SELECT TeacherName FROM Teachers
    UNION DISTINCT
    SELECT StudentName FROM Students;

    結果:

    +-------------+
    | TeacherName |
    +-------------+
    | Warren      |
    | Ben         |
    | Cathy       |
    | Bill        |
    | Faye        |
    | Jet         |
    | Spike       |
    | Ein         |
    +-------------+
    8 rows in set (0.004 sec)

    したがって、DISTINCTを使用しない場合と同じ結果が得られます。 オペレーター。

    重複を含める

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

    SELECT TeacherName FROM Teachers
    UNION ALL
    SELECT StudentName FROM Students;

    結果:

    +-------------+
    | TeacherName |
    +-------------+
    | Warren      |
    | Ben         |
    | Cathy       |
    | Cathy       |
    | Bill        |
    | Bill        |
    | Faye        |
    | Jet         |
    | Spike       |
    | Ein         |
    | Warren      |
    | Bill        |
    +-------------+
    12 rows in set (0.002 sec)

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

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


    1. IDが存在するときにテーブルの不明な主キーを取得する

    2. SQLでJSONオブジェクトの配列として返す(Postgres)

    3. 列名でピボット解除

    4. Access2016でデータベースからパスワードを削除する方法