PREPARATION
受験対策

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

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

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

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

3.60

外部キー制約を含むテーブルを定義する以下のSQL文で、空欄に入るキーワードは何か。

CREATE TABLE test1 (
id INTEGER,
id2 INTEGER ______ test2 (id),
val TEXT);

  1. FOREIGN KEY
  2. EXTERNAL KEY
  3. REFERS TO
  4. REFERENCES
  5.  MATCHES

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

3.59

整数型データの処理について誤った記述を1つ選びなさい。

  1. 値が10桁を超える可能性がある場合は、INTEGER型を使用すべきではない。
  2. 値が20桁を超える可能性がある場合は、BIGINT型を使用すべきではない。
  3. NUMERIC型は30桁を超える整数を扱うことができる。
  4. NUMERIC型は整数、小数のどちらにも利用できる。
  5. 一般に、NUMERIC型の方がINTEGER型よりも演算が高速である。

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

3.58

部門一覧の入ったdeptテーブルと従業員一覧の入ったempテーブルがある。

=> SELECT * FROM dept;

dept_id | dept_name
--------- + -----------
1 | 営業部
2 | 開発部
=> SELECT * FROM emp;

emp_id | dept_id | emp_name
-------- + --------- + --------------
1 | 1 | 鈴木イチロー
2 | 2 | 松井秀喜
3 | 1 | 松坂大輔
4 | 2 | 佐々木主浩

従業員一覧を表示するときに、部門IDの代わりに部門名を表示したい。
次のSQL文の空欄に入る文字列は何か。

=> SELECT emp_id, dept_name, emp_name FROM emp JOIN dept ___ (dept_id);


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

3.57

行やテーブルのロックに関して、適切な記述を1つ選びなさい。

  1. トランザクションブロック内でUPDATE文を実行すると、更新対象の行は自動的にロックされる。
  2. トランザクションブロック内で、テーブル内のすべての行を更新するUPDATE文を実行すると、自動的にテーブルロックがかかる。
  3. テーブルロックは行ロックより優先するので、別のユーザがテーブル内のデータに行ロックをしていても、LOCK TABLEでテーブル全体をロックすることができる。
  4. ACCESS EXCLUSIVEモード(LOCK TABLEのデフォルト)でテーブルロックが掛かっている場合、そのテーブルをUPDATE文で更新できるのは、データベースの管理者ユーザに限られる。
  5. 2人のユーザが同じテーブルの同じ行を同時に更新しようとすると、デッドロックが発生する。

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

3.56

PostgreSQLにおけるトランザクション分離レベルについて、誤った説明を2つ選びなさい。

  1. トランザクション分離レベルは、SET TRANSACTIONコマンドで設定することができる。
  2. トランザクション分離レベルは、BEGINとCOMMITの間の任意の箇所で指定できる。
  3. トランザクション分離レベルとしてREAD UNCOMMITTEDを指定しても、READ COMMITTEDを指定したのと同じ動作になる。
  4. 最上位の分離レベルであるSERIALIZABLEはまだ実装されていない。
  5. トランザクションの外側でトランザクション分離レベルを設定すると、警告が発生するが、エラーにはならない。

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

3.55

以下の一連のSQL文を実行した。

CREATE TABLE test(id INTEGER, val VARCHAR(10));
BEGIN;
INSERT INTO test VALUES(1, 'a'), (1, 'b'), (2, 'a');
SAVEPOINT x;
INSERT INTO test VALUES(3, 'b'), (4, 'a'), (4, 'b'), (5, 'b');
SAVEPOINT y;
DELETE FROM test WHERE id = 1;
ROLLBACK TO x;
DELETE FROM test where id = 4;
COMMIT;

終了後に、テーブルtestには何行のデータがあるか


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

3.54

社名がABCで始まる会社をすべて抽出したい。例えば、'ABCD Inc.'や'ABC Corporation'は抽出対象だが、'XABC Company'は抽出対象ではない。また、大文字と小文字は区別し、'Abc Ltd.'は抽出しないものとする。
以下のSQL文で適切なものを1つ選びなさい。

  1. SELECT * FROM company WHERE name = 'ABC%';
  2. SELECT * FROM company WHERE lower(name) LIKE 'abc%';
  3. SELECT * FROM company WHERE substring(name, 3) = 'ABC';
  4. SELECT * FROM company WHERE substring(name, 1, 3) = 'ABC';
  5.  SELECT * FROM company WHERE substring(name, 'ABC') = 1;

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

3.53

テーブルhumanの列heightには身長、weightには体重がそれぞれNUMERIC型で入っている。 それぞれの行のデータについてBMIを求めるSELECT文として正しいものをすべて選びなさい。
なお、BMIは体重を身長の2乗で割ったものです。

  1. SELECT weight / height / height FROM human;
  2. SELECT weght / height * height FROM human;
  3. SELECT weight / height ^ 2 FROM human;
  4. SELECT weight / height ** 2 FROM human;
  5. SELECT weight / power(height, 2) FROM human;

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

3.52

次の一連のSQLを実行した。

CREATE TABLE test (id INTEGER, x INTEGER, y INTEGER);
INSERT INTO test VALUES(1, 1, 2);
INSERT INTO test VALUES(2, 1, 4);
INSERT INTO test VALUES(3, 1, 6);
INSERT INTO test VALUES(4, 1, 8);
INSERT INTO test VALUES(5, 2, 3);
INSERT INTO test VALUES(6, 2, 5);
INSERT INTO test VALUES(7, 2, 7);
INSERT INTO test VALUES(8, 2, null);
SELECT count(*), count(y), sum(y), avg(y) FROM test WHERE x > 1;

最後のSELECT文の結果として適切なものはどれか。

  1. 8, 7, 35, 5
  2. 8, 8, 35, 4.375
  3. 4, 3, 15, 5
  4. 4, 4, 15, 3.375
  5. 上記のいずれでもない。

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

3.51

関数定義について適切な記述を2つ選びなさい。

  1. 値を返す関数のプログラムを定義する時はCREATE FUNCTION文を使う。
  2. 値を返さない関数のプログラムを定義する時はCREATE PROCEDURE文を使う。
  3. 定義済みの関数のプログラムを変更する時は、新しいプログラムをALTER FUNCTION文により設定する。
  4. 関数の名前はスキーマ内で一意でなければならない。
  5. 関数は必ずしもPL/pgSQLのような手続き言語で作成する必要はなく、SELECT文やUPDATE文などのSQLで記述することもできる。

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

3.50

PostgreSQLにおけるスキーマについて、適切な記述を2つ選びなさい。

  1. テーブル名の指定などでスキーマ名を省略すると、defaultという名前のスキーマを指定したものとみなされる。
  2. あるスキーマにテーブルを新規に作成するには、そのスキーマに対するCREATE権限が必要である。
  3. スキーマを新規に作成するには、データベースに対するCREATE権限が必要である。
  4. スキーマの所有者はそのスキーマと同じ名前のユーザである。
  5. スキーマの下にスキーマを作成することで、最大32階層までのスキーマを作成できる。

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

3.49

シーケンスmy_seqから次の値を取得する方法として適切なものを1つ選びなさい。

  1. SELECT my_seq->nextval;
  2. SELECT my_seq.nextval;
  3. SELECT nextval(my_seq);
  4. SELECT nextval('my_seq');
  5. SELECT nextval("my_seq");

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

3.48

PostgreSQLのトリガー機能について、適切な記述を2つ選びなさい。

  1. SELECT文やINSERT文の実行の前に、トリガーとして定義したプログラムが実行される。
  2. CREATE TRIGGER文の中で、PL/pgSQLを使ってトリガーのコードを定義する。
  3. PL/pgSQLに限らず、PL/Perlなど、他の手続き言語でもトリガーを定義できる。
  4. ビューにトリガーを定義して、ビューを更新することができる。
  5. 1つのテーブルの1つのイベント(例えば、BEFORE INSERT FOR EACH ROW)に定義できるトリガーは1つだけである。

[開発/SQL - ビュー] から

3.47

ビュー(view)に関する説明として最も適切なものを2つ選びなさい。

  1. ビューに対するSELECT権限があっても、そのビューを構成するテーブルに対するSELECT権限がなければ、ビューからデータをSELECTすることはできない。
  2. ビューを作成するには、そのビューを構成するテーブルあるいはテーブルの列に対するCREATE VIEW権限が必要である。
  3. 既存のテーブルと同じ名前のビューを作ることはできない。
  4. PostgreSQLの以前のバージョンでは、ビューの更新にはトリガー(trigger)あるいはルール(rule)を定義する必要があったが、バージョン9.3以降では、(ビューの定義によっては)トリガーやルールが定義されていないくても更新が可能である。
  5. ビューからの検索を高速にするために、ビューに対してインデックスを作成することができる。

[開発/SQL - インデックス] から

3.46

以下のSQL文でテーブルを作成した。

CREATE TABLE sample (id INTEGER, val TEXT);

このテーブルのid列に一意のインデックスを作成したい。以下のSQL文で適切なものを2つ選びなさい。

  1.  ALTER TABLE sample ADD UNIQUE INDEX ON id;
  2. ALTER TABLE sample ALTER COLUMN id UNIQUE;
  3. ALTER TABLE sample ADD UNIQUE(id);
  4. CREATE UNIQUE INDEX ON sample(id);
  5. CREATE INDEX sample_id_unique ON sample(id);

[開発/SQL - テーブル定義] から

3.45

次のSQL文で新規にテーブルを作成した。

CREATE TABLE new_table (
id INTEGER PRIMAEY KEY,
fid INTEGER REFERENCES ftable(id),
val TEXT);

以下の記述から、適切なものを2つ選びなさい。

  1. ftableというテーブルが存在しないとCREATE TABLEがエラーになる。
  2. ftableというテーブルの列idが主キーでないとCREATE TABLEがエラーになる。
  3. new_tableの列idにNULLを入れることはできない。
  4. new_tableの列fidにNULLを入れることはできない。
  5. ftableの列idにNULLを入れることはできない。

[開発/SQL - データ型] から

3.44

論理値型(BOOLEAN型)に関する適切な記述を2つ選びなさい。

  1. 論理値型の列の値としては、キーワードのTRUEとFALSEの他に、文字列の’YES’と’NO’、整数の1と0などを設定することができる。
  2. FALSEとNULLは同等である。
  3. SELECT文で値を表示すると、INSERTやUPDATEでの設定で使った値に関わらず、tあるいはfと表示される。
  4. 実体は整数型の列で代用されているので、0以外の値は何を設定しても真であるとみなされる。
  5. bo が論理値型の列だとして、それが真である行を検索する場合、
    SELECT * FROM table_name WHERE bo;
    と書けば良い。

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

3.43

以下は2つのテーブルtablex, tableyを作成した時のDDLである。

CREATE TABLE tablex (id INTEGER, val VARCHAR(100));
CREATE TABLE tabley (foo INTEGER, bar VARCHAR(50));

tablexへのINSERT文の形式として適切なものを2つ選びなさい。

  1. INSERT INTO tablex id = foo, val = bar FROM tabley;
  2. INSERT INTO tablex SELECT * FROM tabley;
  3. INSERT INTO tablex (id, val) SELECT foo, bar FROM tabley;
  4. INSERT INTO tablex (id, val) VALUES SELECT foo, bar FROM tabley;
  5. INSERT INTO tablex FROM tabley WHERE id = foo AND val = bar;

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

3.42

SELECT * FROM x, y WHERE x.id = y.id;
と等価なSELECT文をJOIN句を使って書いた。

SELECT * FROM x INNER JOIN y ____ (id);

空欄に入るキーワードは何か。


[開発/SQL - SQLコマンド(SELECT文-副問い合わせ)] から

3.41

次のような2つのテーブルtestとsubがある。いずれも、idはINTEGER型、valはTEXT型である。

=> select * from test;

id | val
---- + ----
1 | aaa
2 | BBB
2 | bbb
3 | ccc
(4 rows)
=> select * from sub;

id | val
---- + ----
1 | XXX
1 | xxx
2 | yyy
(3 rows)

次のSELECT文が返す行数を答えなさい。

=> select * from test where exists (select * from sub where id = id);

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

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

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