【SQL】UNIONとORDER BYを同時に使用する方法

データベースクエリの中で、複数のテーブルや異なる結果セットを結合して並び替える場合、UNION と ORDER BY を組み合わせることが一般的です。この記事では、SQLで UNION と ORDER BY を同時に使用する方法を説明します。

UNION とは?

UNION は、複数の SELECT クエリの結果を一つの結果セットにまとめるためのSQL文です。例えば、異なるテーブルから同じ列を持つデータを結合したい場合に使います。

SELECT id, name FROM users
UNION
SELECT id, name FROM admins;

このクエリは、users テーブルと admins テーブルの id と name の列を結合し、重複を排除して1つの結果セットを返します。

ORDER BY で結果を並び替える

UNION を使用して得られた結果セットに対して、ORDER BY を使用することで、特定の列に基づいて結果を並び替えることができます。

SELECT id, name FROM users
UNION
SELECT id, name FROM admins
ORDER BY name;

このクエリでは、users と admins のテーブルから取得したデータを name のアルファベット順に並び替えています。

UNION ALL と UNION の違い

  • UNION:重複する行は自動的に排除されます。
  • UNION ALL:重複する行も含めてすべての結果を返します。
SELECT id, name FROM users
UNION ALL
SELECT id, name FROM admins
ORDER BY name;

このクエリは、重複する行を除外せずに、すべてのデータを結合し、name で並び替えを行います。

列番号で並び替える方法

ORDER BY では、列名だけでなく列番号を使用することもできます。例えば、クエリの結果で2番目の列を基準に並び替えたい場合は、ORDER BY 2 と指定します。

SELECT id, name FROM users
UNION
SELECT id, name FROM admins
ORDER BY 2;

このクエリでは、2番目の列(name)を基準に並び替えています。

注意点

  • ORDER BY は、UNION された結果全体に適用されます。各 SELECT 文に個別の ORDER BY を使用することはできません。
  • 並び替えに使用する列は、すべての SELECT 文で選択されている必要があります。異なる列名を持つクエリを結合する場合、エラーとなることがあります。

まとめ

UNION と ORDER BY を組み合わせることで、異なるテーブルやクエリから取得したデータを効率よく結合し、並び替えることが可能です。複数の結果セットを扱う際に、重複を排除したい場合は UNION、すべての行を返したい場合は UNION ALL を使い分けましょう。また、ORDER BY で結果を希望通りに並べ替えることで、データの分析や表示に役立ちます。