今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(SELECT 文)」からの出題です。
テーブルxに対するSELECT権限がない。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2021年3月24日
SELECT文の基本的な形式を
SELECT 列リスト FROM テーブル名 WHERE 条件式
として習うことが多いと思います。このときの動作はFROM句に指定されたテーブルからWHERE句に指定された条件式に合致する行(WHERE句が省略されたらすべての行)を取得し、取得した各行について列リストで指定された計算式の実行結果を出力する、というものです。このとき、列リストとして指定する計算式は必ずしもテーブルで定義された列を含む必要はなく、current_timestamp のような関数でも良いので、SELECT文をテーブルのデータの検索ではなく、関数の実行など単なる計算の目的でも使うことができます。
PostgreSQLではFROM句を省略できるので、単純に "select 式" の形式で実行すれば式の計算結果を得られますが、データベースの種類によってはFROM句が省略できないため、データが1行だけ入っている何らかのダミー表をFROM句に指定するものがあります。
このとき注意すべきは、取得した各行について計算結果を出力するので、テーブルにデータが1行だけあれば出力も1行だけですが、データが100行あれば同じ結果が100回出力される、逆にデータが1行もなければ結果も0行になる、ということです。
すなわち、テーブルxにデータが入っていなければ例題のような現象が発生します。テーブルxが存在しなかったり、SELECT権限がなかったりした場合にも現在時刻を取得できませんが、この場合はxが存在しない、権限がない、というエラーが発生しますので、例題の事象とは異なる結果になります。
従って正解はDです。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.