TOP

SQL レッスン 12. 結合クエリ (UNION)

ほとんどの SQL クエリは、1 つ以上のテーブルからデータを返す単一のステートメントを使用します。 SQL を使用すると、複数の個別のクエリを同時に実行し、結果を 1 つのデータ セットとして表示することもできます。このような結合されたクエリは、通常、結合または複合クエリと呼ばれます。


1. UNION 演算子の使用

SQL クエリは、UNION 演算子を使用して結合されます。これを行うには、各リクエスト SELECT を指定し、それらの間にキーワード UNION を配置する必要があります。 1 つの一般クエリでの UNION 演算子の使用数に制限はありません。前のセクションでは、MS Access には完全な外部ユニオンを作成する機能がないことに注意しました。ここでは、UNION 演算子を使用してこれをどのように実現できるかを見ていきます。

Run SQLSELECT *
FROM Sumproduct 
LEFT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City
UNION
SELECT * 
FROM Sumproduct 
RIGHT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City

すべてのレコードに別のテーブルに対応するレコードがあるかどうかに関係なく、クエリによって最初のテーブルと 2 番目のテーブルのすべての列が表示されたことがわかります。

多くの場合、UNION の代わりに、多くの条件で WHERE 句を使用すると、同様の結果が得られることにも注目してください。ただし、UNION を使用すると、レコードはより簡潔かつ明確に見えます。

結合クエリを作成するときは、特定のルールに従う必要もあります。

  • UNION リクエストには、UNION キーワードで区切られた 2 つ以上の SELECT 演算子が含まれている必要があります (つまり、リクエストで 4 つの SELECT 演算子が使用されている場合は、3 つの UNION キーワードが必要です)。
  • UNION 演算子の各クエリには同じ列、式、または統計関数が含まれている必要があり、さらに同じ順序でリストされている必要があります。
  • 列のデータ型には互換性がある必要があります。これらは必ずしも同じ型である必要はありませんが、DBMS がそれらを明確に変換できるように、類似した型である必要があります (たとえば、異なる数値データ型や異なる日付型であってもよい)。
  • 2. 繰り返し行を含めるか除外する

    UNION を使用したクエリは、クエリ結果セットからすべての重複行を自動的に削除します (つまり、単一の SELECT ステートメントに複数の条件を指定した WHERE 句のように動作します)。これは UNION 演算子のデフォルトの動作ですが、必要に応じて変更できます。このためには、UNION の代わりに演算子 UNION ALL を使用する必要があります。

    3. 結合されたクエリの結果を並べ替える

    SELECT ステートメントの結果は、ORDER BY ステートメントを使用して並べ替えられます。 UNION を使用してクエリを結合する場合、使用できる ORDER BY 句は 1 つだけであり、最後の SELECT ステートメントに配置する必要があります。実際、結果の一部をある順序で並べ替え、他の部分を別の順序で並べ替えることは、実際にはあまり意味がありません。したがって、複数の文 ORDER BY は許可されません。