PREPARATION
受験対策

Silverの例題解説「開発/SQL」(Ver.2.0)

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

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

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

3.100 NEW

テーブルのパーティショニングを使うことで得られる可能性のある利点として、適切なものをすべて選びなさい。

  1. データが占めるディスク容量を削減する。
  2. 問い合わせの性能を大幅に向上させる。
  3. 頻繁にアクセスする行と、そうでない行を、別のディスク領域に配置する。
  4. 頻繁にアクセスする列と、そうでない列を、別のディスク領域に配置する。
  5. DELETEの代わりにDROP TABLEを実行して、大量データの一括削除を高速化する。

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

3.99

テーブルスペース(tablespace)の使用方法として正しいものを3つ選びなさい。

  1. CREATE DATABASE で作成する新しいデータベースを、デフォルトとは異なるテーブルスペースに配置する。
  2. CREATE SCHEMA で作成する新しいスキーマを、デフォルトとは異なるテーブルスペースに配置する。
  3. CREATE TABLE で作成する新しいテーブルを、デフォルトとは異なるテーブルスペースに配置する。
  4. CREATE VIEW で作成する新しいビューを、元となるテーブルとは異なるテーブルスペースに配置する。
  5. CREATE INDEX で作成する新しいインデックスを、元となるテーブルとは異なるテーブルスペースに配置する。

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

3.98

マテリアライズド・ビューと通常のビューに関する説明として、正しいものを2つ選びなさい。

  1. どちらも CREATE VIEW コマンドで作成する。
  2. ビューの定義が同じなら、一般的に、マテリアライズド・ビューからの検索の方が高速である。
  3. ビューの定義が同じなら、どちらからSELECTしても、必ず同じ結果が返される。
  4. マテリアライズド・ビューは、それに含まれるデータの量に従ってディスク容量を必要とするが、通常のビューはディスク容量を必要としない。
  5. ビューを定義する問い合わせを変更する場合、通常のビューは CREATE OR REPLACE VIEW コマンドを使うのに対し、マテリアライズド・ビューでは REFRESH MATERIALIZED VIEW という特殊なコマンドを使用する。

[開発/SQL - SQLコマンド(DELETE文)] から

3.97

テーブルxxxの主キー列はinteger型のid、テーブルyyyの主キー列はinteger型のidである。
xxxとyyyの両方に同じidの行がある場合に、それらの行をすべてxxxから削除したい。
例えば、select id from xxx が1と2と3、select id from yyy が2と3と4を返したとして、idが2の行と3の行をxxxから削除する。
これを実現するSQLはどれか。

  1. DELETE FROM xxx, yyy WHERE xxx.id = yyy.id;
  2. DELETE FROM xxx, yyy WHERE xxx.id IN (yyy.id);
  3. DELETE FROM xxx JOIN yyy USING xxx.id = yyy.id;
  4. DELETE FROM xxx WHERE id IN (SELECT id FROM yyy);
  5. DELETE FROM xxx WHERE EXISTS (SELECT id FROM yyy);

[開発/SQL - SQLコマンド(UPDATE文)] から

3.96

社員の所属部署、給与を記録したempテーブルと、部署ごとの社員の給与の合計額を記録したdept_salテーブルがある。

empテーブルの内容が更新されたので、dept_salテーブルの給与の合計額(sum_salary列)を更新したい。これを実現する適切なSQL文を選びなさい。なお、dept_salテーブルのdept_id, dept_nameには必要なデータが既に入っているものとします。
  1. UPDATE dept_sal d SET sum_salary = (SELECT sum(salary) FROM emp e WHERE d.dept_id = e.dept_id);
  2. UPDATE dept_sal d SET sum_salary = (SELECT sum(salary) FROM emp e) WHERE d.dept_id = e.dept_id;
  3. UPDATE dept_sal d SET sum_salary = (SELECT sum(salary) FROM emp e GROUP BY dept_id);
  4. UPDATE dept_sal d SET sum_salary = sum(salary) FROM emp e WHERE d.dept_id = e.dept_id;
  5. UPDATE dept_sal d SET sum_salary += salary FROM emp e WHERE d.dept_id = e.dept_id; 

[開発/SQL - SQLコマンド(INSERT文)] から

3.95

以下のSQLを順次実行した。

CREATE TABLE foo (id INTEGER PRIMARY KEY, val VARCHAR);
INSERT INTO foo (id, val) VALUES (1, 'a'), (2, 'b'), (3, 'c');
INSERT INTO foo (id, val) VALUES (3, 'x'), (4, 'y'), (5, 'z');
このとき、テーブルfooには何行のデータが含まれるか。


[開発/SQL - SQLコマンド(SELECT文)] から

3.94

次のSELECT文がエラーにならずに実行できるものとする。
SELECT * FROM x, y WHERE x.a = y.a;
これと必ず同じ行を返すSELECT文をすべて選びなさい。

  1. SELECT * FROM x JOIN y ON a;
  2. SELECT * FROM x JOIN y USING a;
  3. SELECT * FROM x JOIN y USING (a);
  4. SELECT * FROM x NATURAL JOIN y;
  5. SELECT * FROM x NATURAL JOIN y ON a;

[開発/SQL - SQLコマンド(SELECT文)] から

3.93

以下の一連のSQL文を実行した。
create table sample (id integer primary key, val varchar(10));
insert into sample (id, val) values (1, 'ABC'), (2, 'abc'), (3, 'ABCDE'), (4, 'abcde'), (5, null);
select count(*) from sample where val <> 'abc';
最後のSELECT文がcountとして返す値は何か。値を答えよ。


[開発/SQL - トランザクションの概念(LOCK文)] から

3.92

テーブルsampleにおいて、列idは整数型の主キー、列valはtext型である。
あるトランザクションから
SELECT * FROM sample WHERE id = 1 FOR UPDATE;
を実行した。
別のトランザクションから実行したときにロック待ちになるSQL文をすべて選びなさい。

  1. SELECT * FROM sample;
  2. SELECT * FROM sample WHERE id = 1 FOR UPDATE;
  3. UPDATE sample SET val = 'x';
  4. UPDATE sample SET val = 'x' WHERE id = 2;
  5. LOCK TABLE sample;

[開発/SQL - トランザクションの概念(LOCK文)] から

3.91

トランザクション内でLOCK TABLE sample;
を実行し、テーブルsampleの排他ロックを取得した。このロックが解放されるのはどういう場合か。正しいものを3つ選びなさい。

  1. COMMIT; を実行したとき。
  2. RELEASE TABLE sample; を実行したとき。
  3. ROLLBACK; を実行したとき。
  4. UNLOCK TABLE sample; を実行したとき。
  5. Ctrl+Dあるいは \q を入力して psql のセッションを終了したとき。

[開発/SQL - トランザクションの概念(トランザクション分離レベル)] から

3.90

反復不能読み取り(nonrepeatable read)の説明として適切なものを2つ選びなさい。

  1. 他のトランザクションがまだコミットしていないデータを読み取る。
  2. 同じ問い合わせを繰り返し実行したときに、返される行の数が前と異なる。
  3. 同じデータを繰り返し読んだときに、データの内容が前と異なる。
  4. トランザクション分離レベルをシリアライザブル(serializable)にしたら発生しない。
  5. トランザクション分離レベルをリードコミッティド(read committed)にしたら発生しない。

[開発/SQL - トランザクションの概念(トランザクションの構文)] から

3.89

トランザクションの開始、終了に使用される文として間違っているものを1つ選びなさい。

  1. BEGIN
  2. COMMIT
  3. ROLLBACK
  4. START TRANSACTION
  5. STOP TRANSACTION

[開発/SQL - 組み込み関数(文字列演算子、述語)] から

3.88

テーブルxの列aとbはいずれも文字列型である。aとbを連結した文字列を返すSELECT文はどれか。1つ選びなさい。

  1. SELECT a + b FROM x;
  2. SELECT a b FROM x;
  3. SELECT a || b FROM x;
  4. SELECT a, b FROM x;
  5. SELECT a & b FROM x;

[開発/SQL - 組み込み関数(文字列関数)] から

3.87

テーブルxxの文字列型の列aaの3文字目から6文字目までの4文字を取得するSQL文として適切なものをすべて選びなさい。

  1. SELECT substring(aa, 3, 4) FROM xx;
  2. SELECT substring(aa, 3, 6) FROM xx;
  3. SELECT substring(aa from 3 to 6) FROM xx;
  4. SELECT substring(aa from 3 for 4) FROM xx;
  5. SELECT substring(aa, 4 from 3) FROM xx;

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

3.86

テーブルfooには数値型の列barがある。barの絶対値を求めるSELECT文として正しいものを2つ選びなさい。

  1. SELECT @bar FROM foo;
  2. SELECT |bar| FROM foo;
  3. SELECT )bar( FROM foo;
  4. SELECT /bar/ FROM foo;
  5. SELECT abs(bar) FROM foo;

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

3.85

テーブルtestには整数型の列aがある。
SELECT count(*), count(a) FROM test;
を実行したところ、count(*)とcount(a)の値が異なっていた。この理由の説明として適切なものを1つ選びなさい。

  1. count(*)はテーブルtestの行数、count(a)はa列の値の合計値なので、異なる値が返るのが普通である。
  2. a列には値が重複するデータがあるため、count(a)はcount(*)より小さくなる。
  3. count(a)はa列の値が0の行が無視されるため、count(*)より小さくなる。
  4. count(a)はa列の値がNULLの行が無視されるため、count(*)より小さくなる。
  5. データベースシステムの異常が考えられるので、システム管理者に連絡する。

[開発/SQL - SQLコマンド(関数定義、PL/pgSQL)] から

3.84

次のPL/pgSQLの関数は、テーブルtestのsome_columnの値が引数valより大きい行の数を返すものである。空欄( _____ )に入るキーワードは何か。

CREATE FUNCTION count_test(val INTEGER) RETURNS INTEGER AS
DECLARE
rtest RECORD;
cnt INTEGER;
BEGIN
cnt := 0;
FOR rtest IN SELECT * FROM test WHERE some_column > val LOOP
cnt := cnt + 1;
( ________ );
RETURN cnt;
END;
LANGUAGE plpgsql;


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

3.83

DROP SCHEMA foo の結果として適切なものを1つ選びなさい。

  1. PostgreSQLには DROP SCHEMA コマンドが存在しないのでエラーになる。スキーマを削除するにはDROP USER foo を実行する。
  2. ユーザ foo が存在していたらエラーになる。
  3. スキーマ foo 内にオブジェクトが存在していたら、エラーになる。
  4. スキーマ foo 内にオブジェクトが存在していたら、自動的に publicに移動される。
  5. スキーマ foo と、その中に存在するオブジェクトすべてが削除される。

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

3.82

以下のSQL文を実行した。
CREATE TABLE test (id SERIAL, val TEXT); これについて正しい説明をすべて選びなさい。

  1. id列には自動的にNOT NULL制約が付与される。
  2. id列には自動的にUNIQUE制約が付与される。
  3. id列には自動的にインデックスが作成される。
  4. id列の値をUPDATE文で更新することはできない。
  5. INSERT文でid列の値をNULLと指定するとエラーになる。

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

3.81

あるテーブルに、文レベルのBEFORE INSERTトリガーを2つ定義した。この場合の動作について正しいものを選びなさい。

  1. 1つ目のトリガーのみが実行される。
  2. 2つ目のトリガーのみが実行される。
  3. 1つ目のトリガー、2つ目のトリガーの順で両方が実行される。
  4. 2つ目のトリガー、1つ目のトリガーの順で両方が実行される。
  5. 両方のトリガーが実行されるが、どちらが先かは場合による。

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

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

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