本稿の模擬試験は全部で10問です。なお、本講座は基礎から全部解説したわけではなく、「この講座で取り上げたことをきっかけにして自分で学習してくださいね」という意図を含んでいました。そのため、中には本講座で取り上げなかった内容も含まれています。設問ごとに解説をしますので、総復習&実力診断のつもりで挑戦してください!
リレーショナルデータベースの概要
問1
RDBの特徴として正しいものを2つ選択しなさい。
- a. E.F.Coddのルールをサポートする
- b. 継承の機能をサポートする
- c. データはカプセル化される
- d. 結合を使ってデータを取得する
Oracleのバージョンを問わず出題される、一般的な知識を問う問題です。選択肢の文章は短めで、どうにでも解釈できるような表現が使われている場合があります。消去法であいまいな選択肢を正解数まで取り除いていくとよいでしょう。
不正解の選択肢には、オブジェクト指向データベースの特徴(選択肢bとc)が用いられることが多いようです。細かい解説は省きますが(気になる方は「リレーショナルデータベース」「オブジェクト指向データベース」というキーワードでWeb検索してみてください)、本問の正解は選択肢aとdです。
SELECT文によるデータの取得
問2
次の中で実行できるSQL文を選択しなさい。
-
a. SELECT last_name,salary,salary + (salary * 0.1) “Provisional”
FROM employees
WHERE Provisional > 1000; -
b. SELECT last_name,salary,salary + (salary * 0.1) “Provisional”
FROM employees “EMP”; -
c. SELECT department_id,avg(salary + (salary * 0.1)) “Provisional”
FROM employees
HAVING “Provisional” > 1000
GROUP BY department_id; -
d. SELECT last_name,salary,salary + (salary * 0.1) “Provisional”
FROM employees
ORDER BY “Provisional”;
本講座では、SQLの基礎の基礎は取り上げませんでしたが、SELECT
句におけるDISTINCT
の使い方や別名の使い方といった出題もあります。例えば、別名。シングルクォーテーションは文字列データや日付データを囲むときに使用する記号なので、別名を使用するときにはダブルクォーテーションを使用します。それも、「大文字/小文字を区別したい」「命名規則に反する文字(記号や空白)を使用したい」という場合には必ず。そのような特別な事情がなければ、ダブルクォーテーションで囲む必要はありません。そのあたりは、大丈夫でしょう。
ところで、FROM
句で表別名を使用する場合も、ダブルクォーテーションで囲むんでしたっけ? はい、囲んでも囲まなくてもどちらでも構いません。ですので、選択肢bは正解です(以下は選択肢bでの実行例)。
SQL> SELECT last_name,salary,salary + (salary * 0.1) "Provisional" 2 FROM employees "EMP"; LAST_NAME SALARY Provisional ------------------------------ ---------- ----------- King 24000 26400 Kochhar 17000 18700 (途中省略) Higgins 12008 13208.8 Gietz 8300 9130 107行が選択されました。
ただ実際には、ダブルクォーテーションで囲まなければいけないような特殊な文字や記号を使って、表別名を付けるケースはまずないでしょう。なお、表別名を指定するのに、AS
キーワードは使用できないことを忘れないでください。
では、WHERE
句で別名を使用するときはどうでしたか? 次の実行結果から分かるように、ダブルクォーテーションの有無にかかわらず、WHERE
句では別名は使用できません。ですので、選択肢aは不正解です(以下は選択肢aでの実行例)。
SQL> SELECT last_name,salary,salary + (salary * 0.1) "Provisional" 2 FROM employees 3 WHERE Provisional > 1000; WHERE Provisional > 1000 * 行3でエラーが発生しました。: ORA-00904: "PROVISIONAL": 無効な識別子です。 SQL> SELECT last_name,salary,salary + (salary * 0.1) "Provisional" 2 FROM employees 3 WHERE "Provisional" > 1000; WHERE "Provisional" > 1000 * 行3でエラーが発生しました。: ORA-00904: "Provisional": 無効な識別子です。
ということは、HAVING
句、GROUP BY
句、ORDER BY
句で使用することもできないんでしたっけ? 次の実行結果のとおり、HAVING
句とGROUP BY
句はWHERE
句と同様、ダブルクォーテーションの有無にかかわらず使用できません。ですので、選択肢cは不正解です(以下は選択肢cでの実行例)。
SQL> SELECT department_id,avg(salary + (salary * 0.1)) "Provisional" 2 FROM employees 3 HAVING "Provisional" > 1000 4 GROUP BY department_id; HAVING "Provisional" > 1000 * 行3でエラーが発生しました。: ORA-00904: "Provisional": 無効な識別子です。
しかし、ORDER BY
句は使用できます。したがって、選択肢dは正解です(以下は選択肢dでの実行例)。
SQL> SELECT last_name,salary,salary + (salary * 0.1) "Provisional" 2 FROM employees 3 ORDER BY "Provisional"; LAST_NAME SALARY Provisional ------------------------------ ---------- ----------- Olson 2100 2310 Philtanker 2200 2420 (途中省略) Kochhar 17000 18700 King 24000 26400 107行が選択されました。
ORDER BY
句では別名を使用することができます。ただし、次の実行例が示すとおり、ダブルクォーテーションを付けて定義した別名はダブルクォーテーションを付けて使用しなければいけません。
SQL> SELECT last_name,salary,salary + (salary * 0.1) "Provisional" 2 FROM employees 3 ORDER BY Provisional; ORDER BY Provisional * 行3でエラーが発生しました。: ORA-00904: "PROVISIONAL": 無効な識別子です。