PREPARATION
受験対策

Silverの例題解説
「S3.1 SQL コマンド(SELECT 文)」

今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(SELECT 文)」からの出題です。

例題

3.125

現在時刻を調べるためにpsqlを使って select current_timestamp; を実行したら、
current_timestamp
-------------------------------
2021-02-26 22:31:02.311235+09
(1 行)

という結果になったが、これを select current_timestamp from x; としたら
current_timestamp
-------------------
(0 行)

という結果になった。from xを指定したときに現在時刻が表示されない理由として最も適切なものを選びなさい。

  1. テーブルxが存在しない。
  2. テーブルxに対するSELECT権限がない。

  3. テーブルxにcurrent_timestampという列がない。
  4. テーブルxは存在するがデータが1行も入っていない。
  5. current_timestampを取得するときにfrom句を指定してはいけない。

※この例題は実際の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事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システム、AIなどの
新領域での「PostgreSQL」の採用が拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定です

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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