PREPARATION
受験対策

Silverの例題解説- S3 開発/SQL(Ver.3.0)

このページではメルマガで紹介した例題のアーカイブを試験のレベルごとにまとめています。
是非、OSS-DBの学習にお役立てください。

修正等により、例題番号が連番ではない場合がございます。あらかじめご了承ください。

S3.1 SQL コマンド

3.160 NEW

マテリアライズドビューの説明として、正しい記述をすべて答えなさい。


  1. 実体を持つビューであり、ビューのサイズは参照元テーブルの大きさに比例する
  2. マテリアライズドビューの内容は、参照元テーブルの内容と完全同期している
  3. マテリアライズドビューに対して、インデックスを作成できる
  4. テーブルの結合等により結果取得に時間がかかるビューである場合、マテリアライズドビューが有効である

S3.1 SQL コマンド

3.159

日付・時刻を取得する関数について、誤った記述を答えなさい。


  1. 一つのSQLで「statement_timestamp()」を複数回実行した場合、異なる日付・時刻を取得する
  2. 「now()」と「current_timestamp」の実行結果は同じ振る舞いである
  3. トランザクション実行中に「current_timestamp」を実行した場合は、トランザクション開始時の日付・時刻を取得する
  4. トランザクション実行中に「clock_timestamp」を実行した場合は、関数実行時点の日付・時刻を取得する

S3.1 SQL コマンド

3.158

以下のテーブルが存在する。

=# SELECT * FROM member;
 id | name | age | department 
----+------+-----+------------
  1 | 佐藤 |  30 | 開発
  2 | 鈴木 |  24 | 開発
  3 | 高橋 |  22 | 営業
  4 | 田中 |  28 | 営業
  5 | 伊藤 |  36 | 総務

実行結果が以下となるようなSQLについて、すべて答えなさい。


 department | avg  
------------+-----
 開発       | 27

  1. SELECT department, avg(age) FROM member WHERE department = '開発';
  2. SELECT department, avg(age) FROM member WHERE department = '開発' GROUP BY department;
  3. SELECT department, avg(age) FROM member GROUP BY department HAVING department = '開発';
  4. SELECT department, avg(age) FROM member WHERE department != ('営業', '総務') GROUP BY department;
  5. SELECT department, avg(age) FROM member WHERE department NOT IN ('営業', '総務') GROUP BY department;

S3.1 SQL コマンド

3.157

下記のテーブルに対して、「SELECT * FROM t1 ORDER BY id LIMIT 5 OFFSET 1;」を実行した結果を答えなさい。

postgres=# SELECT * FROM t1;
 id | name
----+------
  1 | aaa
  3 | ccc
  2 | bbb
  4 | ddd

--- 選択肢 ---


A.  id | name
   ----+------
     1 | aaa
     3 | ccc
     2 | bbb
     4 | ddd

B.  id | name
   ----+------
     3 | ccc
     2 | bbb
     4 | ddd

C.  id | name
   ----+------
     2 | bbb
     3 | ccc
     4 | ddd

D. LIMIT に全体行数より大きい値が設定されているため、エラーが出力される。


S3.3 トランザクションの概念(LOCK文)

3.156

'LOCK TABLE t1;' を実行した際に、他のトランザクションがテーブル t1 に対して許可される操作として、正しいものを選択しなさい。


  1. SELECT 文
  2. INSERT 文
  3. UPDATE 文
  4. TRUNCATE 文

  5. A~D の操作は許可されない

S3.1 SQL コマンド(シーケンス)

3.155 NEW

次の一連のコマンドの最後の currval の実行結果について正しいものを選択しなさい。

+------------------------------------------+
| セッション1 =# CREATE SEQUENCE test_seq;   |
| セッション1 =# SELECT nextval('test_seq'); |
|  nextval                                 |
| ---------                                |
|        1                                 |
|  (1 row)                                 |
| セッション2 =# SELECT currval('test_seq'); |
+------------------------------------------+



S3.3 トランザクションの概念(トランザクション分離レベル(リードコミッティド、リピータブルリード、シリアライザブル)

3.154

以下の一連のトランザクションを実行した場合、(tx2)のトランザクション分離レベルとして想定されるものは、
Read uncommitted, Read committed, Repeatable read, Serializableのいずれか答えなさい。

(tx1) BEGIN;
(tx2) BEGIN;
(tx1) SELECT * FROM test;
       id
      ----
        1
(tx1) INSERT INTO test VALUES (2);
(tx2) SELECT * FROM test;
       id
      ----
        1
(tx1) UPDATE test SET id=3 WHERE id = 1;
(tx2) SELECT * FROM test;
       id
      ----
        1
(tx1) COMMIT;
(tx2) SELECT * FROM test;
       id
      ----
        2
        3



S3.1 SQLコマンド(データ型)

3.153

JSONを扱うデータ型の説明として、誤っているものを1つ選びなさい。


  1. JSONデータを格納するためのデータ型として、json型とjsonb型が用意されている。
  2. json型は単に入力値のコピーを格納しているので、JSONオブジェクト内に同じキーと値が複数含まれることがある。
  3. jasonb型は処理をするたびに再解析が必要とされないので処理が大幅に高速化される。
  4. json型はインデックスをサポートしている。

  5. JSONを格納するデータに効率的に問い合わせするために、jsonpath型が用意されている。

S3.1 SQLコマンド(レプリケーション)

3.152

ロジカルレプリケーションの説明として、適切なものを3つ選びなさい。


  1. データベース単位での複製ができる。
  2. テーブル単位での複製ができる。
  3. 全てのDDLコマンドが複製される。
  4. 異なるメジャーバージョン間での複製に利用できる。

  5. 複製対象のテーブルはパブリッシャ側はデータ更新できるが、サブスクライバ側はデータ更新できない。


S3.1 SQLコマンド(DELETE文)

3.151

テーブルtestのデータをすべて削除して空にしたい。適切な説明を2つ選びなさい。


  1. DELETE * FROM test; を実行すれば良い。
  2. DELETE ALL FROM test; を実行すれば良い。
  3. DELETE FROM test; を実行すれば良い。
  4. DROP ROWS FROM test; を実行すれば良い。

  5. TRUNCATE test; を実行しても良く、この方が高速である。


S3.1 SQLコマンド(UPDATE文)

3.150

次のようなテーブルを作成し、それぞれに行を作成した。

create table dept(id integer, name varchar);
create table emp(id integer, name varchar, dept_id integer, dept_name text);

ここで、dept表のname列をemp表のdept_name列にコピーするため、次のSQLを実行する。

update emp set dept_name = (select name from dept where id = emp.dept_id);

最も適切な説明を1つ選びなさい。


  1. dept表のid列に主キー(PRIMARY KEY)または一意キー(UNIQUE)制約が必要である。
  2. emp表のdept_id列に主キー(PRIMARY KEY)または一意キー(UNIQUE)制約が必要である。
  3. dept表のid列に重複がある場合、エラーが発生するかもしれない。
  4. dept表のid列に重複がある場合、updateの結果は予測できない。

  5. 構文エラーで実行できない。


S3.1 SQLコマンド(INSERT文)

3.149

次の形式のINSERT文の説明として最も適切なものを2つ選びなさい。

INSERT INTO table_name(col1, col2...) VALUES (val1, val2...)

  1. table_nameで指定するテーブルが存在しなければ、自動的に作成される。
  2. col1, col2...で指定される列リストは、実際のテーブルに存在する列の順序と一致しなくても良い。
  3. テーブルに存在する列でcol1, col2... の列リストに含まれないものについては、NULLが入る。
  4. col1, col2...で指定される列リストより、val1, val2...で指定する値リストの方がデータ個数が多いときはエラーになる。

  5. col1, col2...で指定される列リストより、val1, val2...で指定する値リストの方がデータ個数が少ないときは、それらの列についてNULLを指定したものとみなされる。


S3.1 SQL コマンド(SELECT文)

3.148 NEW

社員の情報を記録したempテーブル、部署名の情報を記録したdeptテーブルがある。

=> select * from emp;
 emp_id | emp_name | dept_id
--------+----------+---------
      1 | イチロー |       1
      2 | 菊池雄星 |       1
      3 | 松井秀喜 |       2
      4 | 松坂大輔 |       3
(4 行)

=> select * from dept;
 dept_id |   dept_name
---------+----------------
       1 | マリナーズ
       2 | ヤンキース
       3 | レッドソックス
(3 行)

これらのテーブルを結合して従業員名と部署名が表示された一覧表を作りたい。次のSELECT文の空欄に入るキーワードは何か?

select emp_id, emp_name, dept_name from emp join dept ____ emp.dept_id = dept.dept_id

  1. AT
  2. IN
  3. ON
  4. USING

  5. WITH


S3.1 SQL コマンド(SELECT文)

3.147

psqlでテーブルtestからSELECTを実行したときの出力は以下のようになった。

=> select * from test;
 a | b
---+---
 a | b
(1 行)

このテーブルについて、select a b from test; を実行したときの出力はどのようになるか。


  1.  a
    ---
     a
  2.  a
    ---
     b
  3.  b
    ---
     a
  4.  b
    ---
     b

  5. 上記のいずれでもない。


S3.3 トランザクションの概念(トランザクションの構文)

3.146

SAVEPOINTの説明として適切なものを3つ選びなさい。


  1. SAVEPOINT name のようにセーブポイント名をパラメータとして実行することが多いが、このパラメータは省略可能である。
  2. SAVEPOINT name として指定するセーブポイント名はトランザクション内で一意でなければならず、同じ名前を再使用するとエラーになる。
  3. ROLLBACK TO name を実行すると、SAVEPOINT以降の更新がすべて破棄されるが、セーブポイント以前の更新は保持される。
  4. ROLLBACK を実行すると、SAVEPOINT 以前のものも含めて、トランザクション内の更新はすべて破棄される。

  5. COMMITを実行すると、SAVEPOINT以前、以降両方の更新がすべて確定されてデータベースに書き込まれる。


S3.2 組み込み関数(時間関数)

3.145

以下のSQLで作成したテーブルdt_sampleがある。

create table dt_sample(pk integer primary key, dt1 date, dt2 date, ti1 time, ts1 timestamp);

このテーブルについて以下の演算をしたときの結果の説明として適切なものを3つ選びなさい。


  1. select dt1 + 10 from dt_sample; を実行すると、dt1の10日後の日付が返される。
  2. select dt2 - dt1 from dt_sample; を実行すると、dt1 から dt2 までの経過日数が整数で返される。
  3. select ti1 + 100 from dt_sample; を実行すると、t11 の100秒後の時刻が返される。
  4. select ts1 + 10 from dt_sample; を実行すると、ts1の10日後の日時が返される。
  5. select dt1 + ti1 from dt_sample; を実行すると、dt1の日付とti1の時刻を組み合わせた日時が返される。


S3.2 組み込み関数(集約関数)

3.144

文字列関数についての以下の説明で、適切なものを3つ選びなさい。


  1. character_length関数で文字列のバイト長を取得できる。
  2. substring関数で文字列の2文字目から5文字目までといった部分文字列を取得できる。
  3. lower関数で文字列がすべて英小文字からなっているかどうかを調べることができる。
  4. trim関数で文字列の両端から空白文字を除去した文字列を取得できる。
  5. replace関数で文字列中の文字の置換を行い、例えばすべての a を A に変更する、といったことができる。


S3.2 組み込み関数(集約関数)

3.143

以下のSQLを実行した。

create table sample(val int);
insert into sample(val) values(null), (1), (2), (3), (4), (5);
select count(*), count(val), sum(val), avg(val), max(val) from sample;

以下から正しいものをすべて選びなさい。

  1. count(*) の値は6である。
  2. count(val)の値は6である。
  3. sum(val)の値は15である。
  4. avg(val)の値は2.5である。
  5. max(val)の値はNULLである。


S3.1 SQL コマンド(PL/pgSQL)

3.142

以下を実行してストアドプログラムを定義した。

create function sample_func(x integer) returns integer as $$
declare
begin
  raise info 'Hello World!';
  return x * 2;
end;
$$ language plpgsql;

定義されたプログラムについて適切な説明を3つ選びなさい。

  1. 実行するには、例えば call sample_func(10) などとすれば良い。
  2. 実行するには、例えば select sample_func(10) などとすれば良い。
  3. 端末から実行すると、画面に Hello World! と表示される。
  4. sample_func(10) は値として20を返す。
  5. 実行すると例外が発生して異常終了する。


S3.1 SQL コマンド(関数定義 / プロシージャ定義)

3.141

以下のコマンドでテーブルと関数を定義した。

create table testa(id integer primary key, val varchar) ;
create function testfunc(x integer) returns varchar language sql as $$
select val from testa where id = x $$ ;

次のSELECT文を実行するために必要な権限として最も適切なものを選びなさい。

select testfunc(1);

  1. 特に制限はなく、どのユーザでも実行できる。
  2. 関数testfuncの所有者のみが実行できる。
  3. 関数testfuncのEXECUTE権限がGRANTされていれば実行できる。
  4. テーブルtestaのSELECT権限がGRANTされていれば実行できる。
  5. 関数testfuncのEXECUTE権限とテーブルtestaのSELECT権限の両方がGRANTされている必要がある。


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

OSS-DBの受験対策

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

例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

OSS-DBやPostgreSQLの知識、技術を得るために役立つ情報の紹介やコラムを公開しています。

応募者全員プレゼント!
オープンソース データベース標準教科書 -PostgreSQL-