
サンプル問題
- A. DESCRIBE
- B. EXIT
- C. SET
- D. SHUTDOWN
正解はこちら
正解はBです。
- DESCRIBE(‘DESC’と省略可能)は、表の列名、NOT NULL制約、列のデータ型を確認するコマンドです。
- Oracle Databaseとの接続を終了するコマンドはEXITです。
- SETは、現行のセッションに対するSQL*Plusシステム変数を変更するコマンドです。
- SHUTDOWNは、インスタンス(Oracle Database本体のイメージ)を停止するコマンドです。SYSDBA権限を持つユーザは接続が終了しません。
- A. UPDATE
- B. ALTER
- C. DELETE
- D. INSERT
正解はこちら
正解はBです。
| SQL分類 | 主なコマンド |
|---|---|
| DML | INSERT / UPDATE / DELETE / MERGE |
| DDL | CREATE / ALTER / DROP / TRUNCATE |
| トランザクション制御 | COMMIT / ROLLBACK |
- A. NUMBER
- B. CHAR
- C. VARCHAR2
- D. DATE
- E. RAW
正解はこちら
正解はC,Eです。
VARCHAR2(size) と RAW(size) はサイズ指定が必須です。
NUMBERとCHARは省略してもエラーになりません。DATEはサイズ指定しません。
SELECT LOWER('DBExamLab') FROM dual;- A. DBExamLab
- B. DBEXAMLAB
- C. Dbexamlab
- D. dbexamlab
正解はこちら
正解はDです。
LOWER(string)は、string文字列を小文字に変換するファンクションです。
SELECT LOWER('DBExamLab') FROM dual;
dbexamlabSELECT UPPER(SUBSTR('DatabaseExamLab',9)) FROM dual;- A. ExamLab
- B. examlab
- C. EXAMLAB
- D. Database
- E. DATABASE
- F. DATABASEE
正解はこちら
正解はCです。
UPPER(string)は、string文字列を大文字に変換するファンクションです。
また、SUBSTR(string,size,[,length])は、string文字列をsize文字目からlength文字数分だけを切り取るファンクションです。
SELECT UPPER(SUBSTR('DatabaseExamLab',9)) FROM dual;
EXAMLAB- A. Database
- B. eExamLab
- C. ExamLab+
- D. エラー
正解はこちら
正解はAです。
RPAD(string,length[,padding])は、string文字列の文字数をlength文字数になるように、右側にpadding文字列を埋め込むファンクションです。
しかし、今回はstring文字列の文字数がlength文字数より小さいため、左側からstring文字列をlengh文字数分だけを切り取ります。
SELECT RPAD('DatabaseExamLab',8,'+') FROM dual;
Databaseちなみに、LPAD(string,length[,padding])と同様の結果になります。
SELECT LPAD('DatabaseExamLab',8,'+') FROM dual;
DatabaseSELECT SYSDATE FROM dual;
2025-01-01 15:30:45- A. NLS_TIME_FORMAT
- B. NLS_DATE_FORMAT
- C. NLS_TIMESTAMP_FORMAT
- D. NLS_TIMESTAMP_TZ_FORMAT
正解はこちら
正解はBです。
NLS_DATE_FORMATはDATE型のフォーマットを設定します。SYSDATEは、データベースサーバのタイムゾーンを基準とした日時データをDATE型で取得するファンクションです。
SHOW PARAMTER NLS_DATE_FORMAT
YYYY-MM-DD HH:MI:SSSELECT COALESCE(NULL,NULL,3,TO_NUMBER('4'),5,6,7) FROM dual;- A. エラー
- B. NULL
- C. 3
- D. 4
- E. 5
正解はこちら
正解はCです。
COALESCE(val1,val2,val3…valN)は、複数の値の中で、最初の非NULL値を取得するファンクションです。
COALESCEのvalは全て同一データ型である必要があるが、今回はTO_NUMBERで文字型を数値型に変換していて、全て数値型のデータになるためエラーになりません。
SELECT COALESCE(NULL,NULL,3,TO_NUMBER('4'),5,6,7) FROM dual;
3- A. NOT NULL制約
- B. CHECK制約
- C. UNIQUE制約
- D. PRIMARY KEY制約
- E. FOREIGN KEY制約
正解はこちら
正解はB,C,D,Eです。
NOT NULL制約のみが表レベルでの指定ができません。
| 制約名 | 列レベル | 表レベル |
|---|---|---|
| NOT NULL制約 | 〇 | ー |
| CHECK制約 | 〇 | 〇 |
| UNIQUE制約 | 〇 | 〇 |
| PRIMARY KEY制約 | 〇 | 〇 |
| FOREIGN KEY制約 | 〇 | 〇 |
SELECT AVG(salary) FROM employees;- A. 従業員の給与の合計
- B. 従業員の平均給与
- C. 従業員の最高給与
- D. 従業員の最低給与
正解はこちら
正解はBです。
AVG関数は、指定したカラムの平均値を返す集計ファンクションです。
SELECT department_id, MAX(salary) FROM employees;- A. 全従業員の最高給与
- B. 部署ごとの最高給与
- C. 従業員数ごとの最高給与
- D. エラー
正解はこちら
正解はDです。
GROUP BYと集計ファンクションを使用する場合は、集計ファンクション以外(今回の場合はdepartment_id)をGROUP BYで指定する必要があります。
- A. COMMIT
- B. EXIT
- C. ROLLBACK SAVEPOINT句なし
- D. CREATE
- E. ROLLBACK SAVEPOINT句あり
正解はこちら
正解はA,B,C,Dです。
トランザクションが終了する条件として、COMMIT文やROLLBACK文(SAVEPOINT句なし)、EXIT文が正常に実行された時になります。また、DDL(CREATE,DROP,ALTER)などが実行された時になります。
SELECT UPPER('a'), 100 FROM dual
UNION
SELECT 'A', ROUND(TRUNC(101,-1)) FROM dual
UNION
SELECT INITCAP('a'), MOD(1100,1000) FROM dual;- A. 0件
- B. 1件
- C. 2件
- D. 3件
- E. エラー
正解はこちら
正解はBです。
UNION は重複を自動的に削除するため、「A 100」が 3 回出力されても 最終的には 1 件のみが結果として返される ことになります。
SELECT UPPER('a'), 100 FROM dual
UNION
SELECT 'A', ROUND(TRUNC(101,-1)) FROM dual
UNION
SELECT INITCAP('a'), MOD(1100,1000) FROM dual;
A 100?
ORACLE DATABASE's BEST DATASE- A. SELECT ‘ORACLE DATABASE’s BEST DATABASE’ FROM dual;
- B. SELECT ‘ORACLE DATABASE”s BEST DATABASE’ FROM dual;
- C. SELECT q'(ORACLE DATABASE’s BEST DATABASE)’ FROM dual;
- D. SELECT q’AORACLE DATABASE’s BEST DATABASEA’ FROM dual;
正解はこちら
正解はB,C,Dです。
一重引用符を含んだ文字リテラルを表記する場合は、一重引用符を2つ続けて記載するか、q'<任意の文字>文字リテラル<任意の文字>’になります。
- A. NOT NULL制約
- B. CHECK制約
- C. UNIQUE制約
- D. PRIMARY KEY制約
- E. FOREIGN KEY制約
正解はこちら
正解はC,Dです。
一意性を保証した列のみに、自動的に一意索引が作成されます。一意性を保証できる制約は、UNIQUE制約とPRIMARY KEY制約になります。
SELECT employee_id, salary FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);- A. 全従業員の給与
- B. 平均給与以上の従業員リスト
- C. 平均給与以下の従業員リスト
- D. 最低給与の従業員リスト
正解はこちら
正解はC,Eです。
副問合せで全従業員の平均給与を算出した上で、それより高い給与を持つ従業員を抽出しています。
SELECT employee_id, department_id FROM employees e
WHERE salary > (
SELECT AVG(salary) FROM employees d WHERE
d.department_id = e.department_id
)
;- A. 全従業員のリスト
- B. 同じ部署で最高給与の従業員リスト
- C. 同じ部署で平均給与以上の従業員リスト
- D. 同じ部署で平均給与以下の従業員リスト
正解はこちら
正解はCです。
相関副問合せで同じ部署内の平均給与を算出した上で、それより高い給与を持つ従業員を抽出しています。
- A. 全従業員リスト
- B. 東京部署の従業員リスト
- C. 東京の各部署で最も給与が高い従業員リスト
- D. 東京の各部署か最も給与が高い従業員リスト
SELECT employee_id, salary, department_id FROM employees e
WHERE department_id IN (
SELECT department_id FROM departments WHERE location_name = 'TOKYO'
)
AND salary = (
SELECT MAX(salary) FROM employees es
WHERE es.department_id = e.department_id
)
;正解はこちら
正解はCです。
相関副問合せで東京にある部署IDを抽出し、その部署IDごとに最も給与が高い従業員を抽出しています。
- A. GRANT SELECT ON user1.sequence1 TO user2
- B. GRANT NEXTVAL ON user1.sequence1 TO user2
- C. GRANT SELECT FOR UPDATE ON user1.table1 TO user2
- D. GRANT SELECT ON user1.table1 TO user2
正解はこちら
正解はA,Dです。
NETVAL,SELECT FOR UPDATEというオブジェクト権限は存在しません。テーブルのオブジェクト権限SELECTは、SELECT文とSELECT FOR UPDATE文の使用を含みます。シーケンスのオブジェクト権限SELECTは、CURRVALとNEXTVALの使用を含みます。
ALTER TABLE <表名> READ ONLY- A. SELECT
- B. SELECT FOR UPDATE
- C. TRUNCATE TABLE
- D. ALTER TABLE ADD
正解はこちら
正解はA,Dです。
読み取り専用モードにすると、表データの変更は実行できなくなります。しかし、TRUNCATEを除く一部のDDLやSELECTは実行できます。
合格のための勉強方法
オラクル認定資格制度の1つである”ORACLE MASTER SQL 2019”を受験し合格することができました!
僕は偏差値40で情報系Fラン大学に通っていて、実務経験はなしの、どこにでもいる大学生です。
以下の記事では、ORACLE MASTER Silver SQL 2019を今後受験する人たちに、試験合格者がどういった勉強法をしてきたかを紹介していきます。

