PREPARATION
受験対策

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

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

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

[開発/SQL - 組み込み関数(演算子)] から

3.119 NEW

PostgreSQLで使用できる演算子について、適切なものを1つ選びなさい。

  1. 割り算で余りを切り捨てて整数の商を求めるには // を使用できる。例えば 5 // 3 は 1 となる。

  2. 割り算で余りを求めるには % を使用できる。例えば 5 % 3 は 2 となる。

  3. べき乗の計算には ** を使用できる。例えば、5 ** 3 は 125 となる。

  4. 論理和を求めるには || を使用できる。例えば true || false は true となる。小数部を四捨五入して整数にするには、round関数を使う。

  5.  文字列を連結するには + を使用できる。例えば 'abc' + 'def' は 'abcdef' となる。


[開発/SQL - 組み込み関数(集約関数)] から

3.118

PostgreSQLの関数の説明として正しいものを3つ選びなさい。

  1. 小数部を切り捨てて整数にするには、rounddown 関数を使う。

  2. 小数部を切り捨てて整数にするには、trunc 関数を使う。

  3. 小数部を切り上げて整数にするには、roundup 関数を使う。

  4. 小数部を切り上げて整数にするには、ceil 関数を使う。

  5. 小数部を四捨五入して整数にするには、round関数を使う。

  6.  小数部を四捨五入して整数にするには、int関数を使う。


[開発/SQL - 組み込み関数(集約関数)] から

3.117

SELECT count(*), count(x) FROM sample_table;
を実行したときの動作として適切なものを1つ選びなさい。

  1. count(*) も count(x) もテーブルsample_tableの行数が返される。

  2. count(*) は sample_table の行数、count(x) は列 x の異なる値の種類の数が返される。

  3. count(*) は sample_table の行数、count(x) は列 x の値が NULL でない行の数が返される。

  4. count(*) は sample_table でどの列もNULLでない行の数、count(x) は列 x の値が NULL でない行の数が返される。

  5. count(*) は sample_table の一番左の列の値の合計、count(x) は列 x の値の合計が返される。


[開発/SQL - SQLコマンド(PL/pgSQL)] から

3.116

PL/pgSQLを使って次のような関数定義をしたい。

create function test_func(a integer) returns integer as $$
declare
x record;
begin
select * into x from test_table
where id = a;
return x.value;
end;
$$ language plpgsql;

これに関する説明として適切なものを選びなさい。

  1. 2行目の declare の後にセミコロンが必要なので、このcreate functionはエラーとなる。

  2.  3行目の x record は間違っているので、このcreate functionはエラーとなる。正しくは x test_table%ROWTYPE とする。

  3.  4行目の begin の後にセミコロンが必要なので、このcreate functionはエラーとなる。

  4.  5行目で参照するtest_table が存在しなければ、create funtion はエラーとなる。

  5.  6行目で参照するid列が存在しないとき、create functionには成功するが、この関数を呼び出したときに実行時エラーとなる。


[開発/SQL - SQLコマンド(関数定義、プロシージャ定義)] から

3.115

CREATE FUNCTION func_add(x integer, y integer) RETURNS integer AS $$
SELECT x + y;
$$ LANGUAGE SQL;

上記について適切な説明を3つ選びなさい。

  1. PL/pgSQL を使って関数を定義している。
  2. func_add という関数を定義している。
  3. SELECT func_add(2, 3) を実行すると 5 が返される。
  4. 1行目の終わりと3行目の先頭の $$ の代わりに、’ (シングルクォート)を使っても良い。
  5. CREATE FUNCTIONの実行には、データベースの管理者権限が必要である。る。

[開発/SQL - SQLコマンド(パーティション)] から

3.114

パーティションテーブル(PostgreSQLバージョン10で導入された宣言的パーティショニング)およびそのパーティションを作成する手順として正しいものを2つ選びなさい。

  1. CREATE PARTITIONED TABLEコマンドを使用してパーティションテーブルを作成する。
  2. CREATE TABLEコマンドにPARTITIONED BYオプションを指定することでパーティションテーブルを作成する。
  3. CREATE PARTITIONコマンドでパーティションを作成する。
  4. CREATE TABLE PARTITIONコマンドでパーティションを作成する。E 権限が必要である。
  5. CREATE TABLEコマンドにPARTITION OFオプションを指定することでパーティションを作成する。

[開発/SQL - SQLコマンド(テーブルスペース)] から

3.113

テーブルスペース(テーブル空間、tablespace)の使い方として、間違っているものを1つ選びなさい。

  1. CREATE TABLESPACE コマンドでテーブルスペースとして使用するディレクトリを指定するが、このディレクトリは既存で、かつ空でなければならない。
  2. テーブルを作成する際、 CREATE TABLE (…テーブル定義…) TABLESPACE テーブルスペース名; のようにすれば、指定したテーブルスペースが使用される。
  3. パラメータ default_tablespace でテーブルスペース名を指定すると、CREATE TABLE などで作成されるオブジェクトは、設定されたテーブルスペースを使用する。
  4. テーブルスペース内にオブジェクトを作成するには、そのテーブルスペースについての CREATE 権限が必要である。
  5. DROP TABLESPACEコマンドでテーブルスペースを削除するとき、その中にあるオブジェクトも自動的に削除される。

[開発/SQL - SQLコマンド(スキーマ)] から

3.112

ユーザfooのスキーマ検索パスはデフォルトの “$user”, public に設定されている。
publicスキーマに bar というテーブルがあり、全ユーザ(public)に SELECTなどの権限がGRANTされている。fooというスキーマが存在するが、テーブルは1つも存在しない。
このとき、以下の説明から正しいものをすべて選択しなさい。

  1. SELECT * FROM bar; は foo.bar というテーブルが見つからない、というエラーになる。
  2. CREATE TABLE bar(...); は public.bar というテーブルが既に存在するのでエラーになる。
    ここで、CREATE TABLE foo.bar(...); を実行し、foo.bar と public.bar の2つのテーブルが存在する状態にした。
  3. SELECT * FROM bar; とすると、foo.bar と public.bar の両方のテーブルから検索したデータが返される。
  4. DROP TABLE bar; を実行すると、foo.bar だけが削除される。
  5. DROP TABLE bar; を実行すると、public.bar だけが削除される。

[開発/SQL - SQLコマンド(シーケンス)] から

3.111 NEW

以下の一連の操作を行った。最後のSELECT文がcurrvalとして返す値は何か。

create table test1(id integer, val varchar(10));
create table test2(id integer, val varchar(10));
create sequence seq1;
insert into test1(id, val) values (1, 'abc'), (2, 'def');
insert into test2(id, val) values (nextval('seq1'), 'xyz');
begin;
insert into test2(id, val) select nextval('seq1'), val from test1;
rollback;
insert into test2(id, val) values (nextval('seq1'), 'pqr');
select currval('seq1');


[開発/SQL - SQLコマンド(トリガー)] から

3.110

あるテーブルのUPDATEについて、文レベルのBEFOREトリガー、文レベルのAFTERトリガー、行レベルのBEFOREトリガー、行レベルのAFTERトリガーを定義した。このテーブルについてUPDATEが実行されるときのトリガーの実行順序はどうなるか。

  1. BEFORE文 → BEFORE行 → AFTER文 → AFTER行
  2. BEFORE文 → BEFORE行 → AFTER行 → AFTER文
  3. BEFORE行 → BEFORE文 → AFTER行 → AFTER文
  4. BEFORE行 → BEFORE文 → AFTER文 → AFTER行
  5. BEFORE → AFTER の順だが、文レベルと行レベルの実行順序はトリガーを定義する関数名のアルファベット順で決まる

[開発/SQL - SQLコマンド(ビュー)] から

3.109 

ALTER VIEWコマンドで実行できることを2つ選びなさい。

  1. ビューに列を追加する。
  2. ビューから列を削除する。
  3. ビューの列のデータ型を変更する。
  4. ビューの名前を変更する。
  5. ビューの所有者を変更する。

[開発/SQL - SQLコマンド(インデックス)] から

3.108

CREATE TABLEの実行時に自動的にインデックスが作成されるのはどの場合か。該当するものをすべて選びなさい。

  1. テーブルに FOREIGN KEY 制約をつけたとき
  2. 列にNOT NULL制約をつけたとき
  3. 列に PRIMARY KEY制約をつけたとき
  4. 列に REFERENCES 制約をつけたとき
  5. 列に UNIQUE 制約をつけたとき

[開発/SQL - SQLコマンド(テーブル定義)] から

3.107 NEW

ALTER TABLEで変更できないものを1つ選びなさい。

  1. テーブルの名前
  2. テーブルの所有者
  3. 列の名前
  4. 列のデータ型
  5. 列の並び順

[開発/SQL - SQLコマンド(データ型)] から

3.106

PostgreSQL で使用できるデータ型の説明として間違っているものを1つ選びなさい。

  1. integer は4バイトの整数で、10桁までの値であれば安全に使用できる。
  2. real と double precision は浮動小数点の実数で、double precision の方が精度が高い演算が可能である。
  3. numeric は整数あるいは小数を扱う数値型で、全体の桁数と、小数点以下の桁数を指定することで、精度を設定できる。
  4. date は日付を扱うデータ型で、時刻の情報は保持していない。
  5. timestamp は日時を扱うデータ型で、マイクロ秒単位の時刻データを保持する。

[開発/SQL - SQLコマンド(マテリアライズド・ビュー)] から

3.105

PostgreSQLのバージョン10からサポートされた宣言的パーティショニングと、従来のバージョンからサポートされている継承を利用したパーティショニングの説明として、適切なものを3つ選びなさい。なお、親テーブルの名前は parent、パーティションの名前は partition1, partition2, partition3… だとします。

  1. どちらの方法でも、親テーブルの作成は通常の CREATE TABLE parent… で行い、パーティションを使うための特別なオプション指定は必要ない。
  2. パーティションを作成するときのコマンドは、宣言的パーティショニングでは
    CREATE TABLE partition1 PARTITION OF parent…
    継承を利用する場合は
    CREATE TABLE partition1 () INHERITS (parent)
    で、どちらもCREATE TABLEを使用する。
  3. どちらの方法でも、INSERT文の実行時にデータの格納先となるパーティションが自動的に作成することはなく、事前にパーティションを作成しておく必要がある。
  4. どちらの方法でも、親テーブルとパーティションを適切なCREATEコマンドで作成しておけば、
    INSERT INTO parent…
    で挿入するデータは自動的に適切なパーティションに格納される。
  5. 宣言的パーティショニングではすべてのパーティションは同じ列を持っていて、異なる列を追加できないが、継承を利用したパーティショニングでは、パーティションごとに異なる列を追加できる。

[開発/SQL - SQLコマンド(マテリアライズド・ビュー)] から

3.104 

テーブルtable1とtable2を結合したマテリアライズド・ビューmviewを作成した。適切なものを3つ選びなさい。

  1. 作成するのに使用したコマンドは
    CREATE MATERIALIZED VIEW mview AS SELECT …  FROM table1, table2…
    のような形式である。
  2. 作成時に使用したAS以下のSELECT文を実行するより、
    SELECT * FROM mview
    を実行する方が通常は高速である。
  3. 作成時に使用したAS以下のSELECT文を実行した結果に含まれる行と
    SELECT * FROM mview
    を実行した結果に含まれる行は常に同じである。
  4. mviewの元となっているtable1の行を更新したが、mviewからSELECTした結果では更新前の古いデータが表示された。
  5. 元になっているテーブルtable2のサイズは巨大だが、データベースには mview
    の定義文が保存されるだけなので、マテリアライズド・ビューを作成してもディスク容量が逼迫する心配はない。

[開発/SQL - SQLコマンド(プロシージャ定義)] から

3.103 

PostgreSQLのバージョン11で追加されたプロシージャ(PROCEDURE)と、従来のバージョンからサポートされている関数(FUNCTION)の違いの説明として適切なものを2つ選びなさい。

  1. PROCEDURE は CREATE PROCEDURE コマンドで、FUNCTION は CREATE FUNCTION コマンドで作成する。
  2. PROCEDURE は標準 SQL で定義されているが、FUNCTION は PostgreSQL 独自の拡張機能である。
  3. void型の FUNCTION は廃止予定であり、PROCEDURE に置き換えることが推奨されている。
  4. FUNCTION は SELECT func_name(arg1, arg2...) のようにして実行するのに対し、PROCEDURE
    は CALL proc_name(arg1, arg2...) のようにして実行する。
  5. PROCEDUREはデータベース内のデータを更新できるが、FUNCTIONはデータに基づいた計算をするだけで、データの更新はできない。

[開発/SQL - 組み込み関数(時間関数)] から

3.102 

現在時刻を返す関数 current_timestamp の select を以下のように連続して2回実行した。

select current_timestamp;
select current_timestamp;

このとき、2回とも同じ値が返った。考えられる理由として最も適切なものを選びなさい。

  1. サーバマシンのハードウェアクロックが故障している。
  2. サーバマシンで timed を実行していないため、時刻が正確に保たれていない。
  3. 2つのSELECT文を間を空けず、連続して素早く実行したため、同じ時刻が返った。
  4. これらのSELECTを実行する直前に BEGIN コマンドを実行していた。
  5. 同じセッション内から実行すれば、current_timestamp は必ず同じ値を返す。

[開発/SQL - SQLコマンド(パーティション)] から

3.101 

CREATE TABLE table1(列定義) PARTITION BY…
CREATE TABLE partition1 PARTITION OF table1 FOR VALUES…
CREATE TABLE partition2 PARTITION OF table1 FOR VALUES…

の手順でパーティションテーブルを作成した。このときの動作として正しいものを1つ選びなさい。

  1. テーブルへのINSERTで適切な挿入先となるパーティションが作成されていない場合、自動的に新しいパーティションが作成され、そこにデータが挿入される。
  2. UPDATEの結果、そのデータが別のパーティションに移ることになる場合は、エラーとなって実行されない。
  3. table1にインデックスを作成すれば、それがすべてのパーティションに適用される。
  4. table1に行トリガーを作成すれば、それがすべてのパーティションに適用される。
  5. 一旦作成したパーティションpartition1は、パーティションが空でなければ削除できない。

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

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

LPI-Japan
Platinum Sponsors

関連資格