PREPARATION
受験対策

Silverの例題解説「開発/SQL - SELECT文」

今回は、Silverの「開発/SQL - SELECT文」からの出題です。

例題

3.13

UNION 演算子を使った次の SELECT 文について正しいものをすべて選びなさい。

SELECT * FROM foo UNION SELECT * FROM bar ORDER BY 1;

  1. 返される行の数は、テーブル foo の行数とテーブル bar の行数の合計になる。
  2. テーブル foo のデータがランダムな順番で出力され、続いてテーブル bar のデータが第1カラムのデータに従って昇順にソートされて出力される。
  3. テーブル foo の列の数とテーブル bar の列の数が異なるとエラーになる。
  4. テーブル foo の列のデータ型とテーブル bar の列のデータ型が完全に一致しないとエラーになる。
  5. テーブル foo の列の名前とテーブル bar の列の名前が一致しないとエラーになる。

※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2012年12月5日

解答と解説

UNION 演算子を使って複数の SELECT 文をつなぐことにより、SELECT の結果の和集合を求めることができます。
SELECT ... UNION SELECT ... UNION SELECT ... とすることで3つ以上の SELECT の結果の和集合を求めることもできます。
UNION を使うとき、それぞれの SELECT 文で選択する列について、個数と型が一致しなければならない、という条件があります。ただし、型については、変換可能であれば十分で、例えば、一方が INTEGER、他方が VARCHAR 型であればエラーになりますが、一方がVARCHAR(10)、他方がVARCHAR(15)やCHAR(15)というケースは問題ありません。
列の名前は同じである必要はありませんが、SELECT の結果が表示されるときのヘッダには、先頭の SELECT 文のテーブルの列名が表示されます。
和集合なので、両方の SELECT 文に全く同じ結果が含まれていた場合は、1件しか出力されません。ただし、UNION の代わりに UNION ALL とすると、同じ結果も複数回出力されます。
ORDER BY は和集合を求めた後で適用されるので、最後の SELECT 文にだけ書きます。SELECT の結果全体がソートされて出力されます。なお、それぞれの SELECT 文で列名が異なりますから、ORDER BY 句では列名でなく列番号を指定します。PostgreSQL では、列番号の代わりに、先頭の SELECT 文の列名を指定しても動作しますが、RDBMS の種類によっては、すべての SELECT 文で列名が同じでも、列名を指定できないことがありますから注意してください。

従って、正解は C です。

UNION の他に、積集合を求める INTERSECT、差集合を求める EXCEPT もあります。

今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。

※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システムでの
OSS-DBの採用がますます拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定資格になります

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

LPI-Japan
Platinum Sponsors