今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(SELECT文)」からの出題です。
※この例題は実際の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事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.