ご覧のとおり、使い方はとても簡単です。ただし、マージを行う際には注意すべきルールがいくつかあります。
1.UNION は、キーワード UNION で区切られた 2 つ以上の SELECT ステートメントで構成されている必要があります (したがって、4 つの SELECT ステートメントを組み合わせると、3 つの UNION キーワードが使用されます)。
2. UNION 内の各クエリには、同じ列、式、または集計関数が含まれている必要があります (ただし、列は同じ順序でリストされる必要はありません)。
3. 列のデータ型は互換性がある必要があります。型はまったく同じである必要はありませんが、DBMS が暗黙的に変換できる型である必要があります (たとえば、異なる数値型や異なる日付型)。これらの基本的なルールまたは制限に従っている場合は、任意のデータ取得タスクに と を使用できます。
重複行を含めるかキャンセルする
個別に実行すると、最初の SELECT ステートメントは 4 行を返し、2 番目の SELECT ステートメントは 5 行を返すことに気付きました。ただし、2 つの SELECT ステートメントを UNION で結合すると、9 行ではなく 8 行だけが返されます。
UNION は、クエリ結果セットから重複行を自動的に削除します (つまり、単一の SELECT ステートメント内の複数の WHERE 句条件のように動作します)。サプライヤー 1002 も 5 より低い価格の商品を生産しているため、両方の SELECT ステートメントはその行を返します。 UNION を使用すると、重複する行は自動的に抑制されます。
これは UNION のデフォルトの動作ですが、必要に応じて変更できます。実際、一致する行をすべて返したい場合は、 UNION の代わりに UNION ALL を使用します。
以下の例を参照してください:
入力:
select vend_id,prod_id,prod_price from products where prod_price <= 5 union all select vend_id,prod_id,prod_price from products where vend_id in (1001,1002);
出力:
分析: UNION ALL を使用すると、MySQL は重複行をキャンセルしません。したがって、この例では 9 行が返され、そのうちの 1 行が 2 回表示されます。
UNION と WHERE UNION は、ほとんどの場合、複数の WHERE 条件と同じ働きをします。 UNION ALL は UNION の形式の 1 つで、WHERE 句では実行できない作業を完了します。各条件に一致するすべての行 (重複行を含む) を表示する必要がある場合は、WHERE の代わりに UNION ALL を使用する必要があります。
結合されたクエリ結果を並べ替える
SELECT ステートメントの出力は、ORDER BY 句を使用して並べ替えられます。クエリを UNION と組み合わせる場合、ORDER BY 句は 1 つだけ使用でき、最後の SELECT ステートメントの後に指定する必要があります。結果セットの一部をある方向に並べ替え、別の部分を別の方向に並べ替えるという状況は存在しないため、複数の ORDER BY 句は許可されません。
次の例では、前の UNION によって返された結果を並べ替えます。
入力:
select vend_id,prod_id,prod_price from products where prod_price <= 5 union select vend_id,prod_id,prod_price from products where vend_id in (1001,1002) order by vend_id,prod_price;
出力:
分析: この UNION は、最後の SELECT ステートメントの後に ORDER BY 句を使用します。 ORDER BY 句は最後の SELECT ステートメントのみの不可欠な部分であるように見えますが、MySQL は実際にはこれを使用して、すべての SELECT ステートメントによって返されるすべての結果を並べ替えます。
異なるテーブルを結合する。式を簡素化するために、この章の例の結合クエリはすべて同じテーブルを使用します。ただし、UNION を使用した結合クエリは異なるテーブルに適用できます。
以上がMySQL 複合クエリでの UNION 照合の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。