実力試験・2006年秋編!
ORACLE MASTER Bronze SQL基礎I
有限会社 G.F.インフィニティ (Project - ∞)
2006/10/21
2005年5月〜2006年4月の12カ月間連載していた「ORACLE MASTER Bronze SQL基礎I講座」。ORACLE MASTERの最も基礎的な資格である「ORACLE MASTER Bronze Oracle Database 10g」の取得に必要な試験の1つを解説してきました。
2006年5月の「春のBronze実力試験 ORACLE MASTER Bronze SQL基礎I 編」に引き続き、今回は秋編として「Bronze SQL 基礎 I」の出題範囲から10問を出題します。分からない問題、間違えた問題などは、連載各回のページを参考にして復習してください。
それでは、挑戦してみましょう!
問い合わせ結果を「TABLE」という見出しで表示する方法として正しい文を選択しなさい。
- SELECT col1 TABLE FROM tab1;
- SELECT col1 'TABLE' FROM tab1;
- SELECT col1 AS TABLE FROM tab1;
- SELECT col1 "TABLE" FROM tab1;
ヒント:「Oracleで使うSQLの基礎を学ぶ」
解答・解説へ
次のデータを確認してください。
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ----- -------- ---------- ---------- ------
7369 SMITH CLERK 7902 80-12-17 800 20
7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30
7521 WARD SALESMAN 7698 81-02-22 1250 500 30
7566 JONES MANAGER 7839 81-04-02 2975 20
7654 MARTIN SALESMAN 7698 81-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 81-05-01 2850 30
7782 CLARK MANAGER 7839 81-06-09 2450 10
7788 SCOTT ANALYST 7566 87-04-19 3000 20
7839 KING PRESIDENT 81-11-17 5000 10
7844 TURNER SALESMAN 7698 81-09-08 1500 0 30
7876 ADAMS CLERK 7788 87-05-23 1100 20
7900 JAMES CLERK 7698 81-12-03 950 30
7902 FORD ANALYST 7566 81-12-03 3000 20
7934 MILLER CLERK 7782 82-01-23 1300 10
|
このデータから次の結果を取り出している文を選択しなさい。
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ----- -------- ---------- ---------- ------
7934 MILLER CLERK 7782 82-01-23 1300 10
|
- SELECT * FROM emp WHERE deptno = 10 AND hiredate > '1982-01-01' OR job = 'CLERK';
- SELECT * FROM emp WHERE (deptno = 10 AND hiredate > '1982-01-01' OR job = 'CLERK');
- SELECT * FROM emp WHERE deptno = 10 AND (hiredate > '1982-01-01' OR job = 'CLERK');
- SELECT * FROM emp WHERE (deptno = 10 AND hiredate > '1982-01-01') OR job = 'CLERK';
ヒント:「SQL問い合わせによる行の制限とソート」
解答・解説へ
「XYZ」という値を「xxXYZ」という結果として表示している文を選択しなさい。
- SELECT RPAD('XYZ',5,'x') FROM dual;
- SELECT LPAD('XYZ',5,'x') FROM dual;
- SELECT RTRIM('XYZ','x') FROM dual;
- SELECT LTRIM('XYZ','x') FROM dual;
ヒント:「SQLで使える関数の基礎知識」
解答・解説へ
現在2006年10月20日(金)です。翌週の月曜日として「10月23日」という結果を戻す文を選択しなさい。
- SELECT TO_CHAR(NEXT_DAY(SYSDATE,'月曜日'),'MM"月"DD"日"') FROM dual;
- SELECT TO_DATE(NEXT_DAY(SYSDATE,'月曜日'),'MM"月"DD"日"') FROM dual;
- SELECT TO_CHAR(LAST_DAY(SYSDATE,'月曜日'),'MM"月"DD"日"') FROM dual;
- SELECT TO_DATE(LAST_DAY(SYSDATE,'月曜日'),'MM"月"DD"日"') FROM dual;
ヒント:「SQLで使える関数の基礎知識」
解答・解説へ
次のデータを確認してください。
SQL> SELECT * FROM dept;
DEPTNO DNAME MGR_ID LOCATION_ID
------ --------------- ------ -----------
10 Administration 200 1700
20 Marketing 201 1800
60 IT 103 1400
90 Executive 100 1700
100 Finance 108 1700
110 Accounting 205 1700
SQL> SELECT * FROM emp;
EMPNO ENAME SALARY MGR_ID DEPTNO
------ ---------- ------ ------ ------
200 Jennifer 4400 101 10
201 Michael 13000 100 20
202 Pat 6000 201 20
203 Susan 6500 101 40
204 Hermann 10000 101 70
205 Shelley 12000 101 110
206 William 8300 205 110 |
次の文によって戻るデータを選択しなさい。
SELECT * FROM emp NATURAL JOIN dept; |
1.
DEPTNO EMPNO ENAME SALARY MGR_ID DNAME MGR_ID LOCATION_ID
------ ------ ---------- ------ ------ --------------- ------ -----------
10 200 Jennifer 4400 101 Administration 200 1700
20 201 Michael 13000 100 Marketing 201 1800
20 202 Pat 6000 201 Marketing 201 1800
110 205 Shelley 12000 101 Accounting 205 1700
110 206 William 8300 205 Accounting 205 1700
2.
MGR_ID EMPNO ENAME SALARY DEPTNO DEPTNO DNAME LOCATION_ID
------ ------ ---------- ------ ------ ------ --------------- -----------
100 201 Michael 13000 20 90 Executive 1700
201 202 Pat 6000 20 20 Marketing 1800
205 206 William 8300 110 110 Accounting 1700
3.
MGR_ID DEPTNO EMPNO ENAME SALARY DNAME LOCATION_ID
------ ------ ------ ---------- ------ --------------- -----------
201 20 202 Pat 6000 Marketing 1800
205 110 206 William 8300 Accounting 1700
4.
EMPNO ENAME SALARY MGR_ID DEPTNO DEPTNO DNAME MGR_ID LOCATION_ID
------ ---------- ------ ------ ------ ------ --------------- ------ -----------
200 Jennifer 4400 101 10 10 Administration 200 1700
200 Jennifer 4400 101 10 20 Marketing 201 1800
200 Jennifer 4400 101 10 60 IT 103 1400
200 Jennifer 4400 101 10 90 Executive 100 1700
200 Jennifer 4400 101 10 100 Finance 108 1700
200 Jennifer 4400 101 10 110 Accounting 205 1700
201 Michael 13000 100 20 10 Administration 200 1700
201 Michael 13000 100 20 20 Marketing 201 1800
201 Michael 13000 100 20 60 IT 103 1400
201 Michael 13000 100 20 90 Executive 100 1700
201 Michael 13000 100 20 100 Finance 108 1700
201 Michael 13000 100 20 110 Accounting 205 1700
202 Pat 6000 201 20 10 Administration 200 1700
202 Pat 6000 201 20 20 Marketing 201 1800
202 Pat 6000 201 20 60 IT 103 1400
202 Pat 6000 201 20 90 Executive 100 1700
202 Pat 6000 201 20 100 Finance 108 1700
202 Pat 6000 201 20 110 Accounting 205 1700
203 Susan 6500 101 40 10 Administration 200 1700
203 Susan 6500 101 40 20 Marketing 201 1800
203 Susan 6500 101 40 60 IT 103 1400
203 Susan 6500 101 40 90 Executive 100 1700
203 Susan 6500 101 40 100 Finance 108 1700
203 Susan 6500 101 40 110 Accounting 205 1700
204 Hermann 10000 101 70 10 Administration 200 1700
204 Hermann 10000 101 70 20 Marketing 201 1800
204 Hermann 10000 101 70 60 IT 103 1400
204 Hermann 10000 101 70 90 Executive 100 1700
204 Hermann 10000 101 70 100 Finance 108 1700
204 Hermann 10000 101 70 110 Accounting 205 1700
205 Shelley 12000 101 110 10 Administration 200 1700
205 Shelley 12000 101 110 20 Marketing 201 1800
205 Shelley 12000 101 110 60 IT 103 1400
205 Shelley 12000 101 110 90 Executive 100 1700
205 Shelley 12000 101 110 100 Finance 108 1700
205 Shelley 12000 101 110 110 Accounting 205 1700
206 William 8300 205 110 10 Administration 200 1700
206 William 8300 205 110 20 Marketing 201 1800
206 William 8300 205 110 60 IT 103 1400
206 William 8300 205 110 90 Executive 100 1700
206 William 8300 205 110 100 Finance 108 1700
206 William 8300 205 110 110 Accounting 205 1700
ヒント:「SQLで複数の表からデータを取り出す」
解答・解説へ
次のデータを確認してください。
SQL> SELECT * FROM emp;
EMPNO ENAME SALARY MGR_ID DEPTNO
------ ---------- ------ ------ ------
200 Jennifer 4400 101 10
201 Michael 13000 100 20
202 Pat 6000 201 20
203 Susan 6500 101 40
204 Hermann 10000 101 70
205 Shelley 12000 101 110
206 William 8300 205 110 |
次の結果を取得している文を選択しなさい。
EMPNO ENAME SALARY MGR_ID DEPTNO
------ ---------- ------ ------ ------
201 Michael 13000 100 20
205 Shelley 12000 101 110
204 Hermann 10000 101 70 |
- SELECT * FROM emp WHERE rownum<=3 ORDER BY salary;
- SELECT * FROM emp WHERE rownum<=3 ORDER BY salary DESC;
- SELECT * FROM (SELECT * FROM emp ORDER BY salary) WHERE rownum<=3;
- SELECT * FROM (SELECT * FROM emp ORDER BY salary DESC) WHERE rownum<=3;
ヒント:「副問い合わせの構文を覚える」
解答・解説へ
次のデータを確認してください。
SQL> SELECT * FROM tab1;
COL1 COL2
------ -----
1 A
2 B
3 C
SQL> SELECT * FROM tab2;
COL1 COL2
------ -----
1 A
4 D
3 C |
次の文によって戻るデータを選択しなさい。
1.
COL1 COL2
------ -----
2 B
2.
COL1 COL2
------ -----
1 A
3 C
3.
COL1 COL2
------ -----
1 A
2 B
3 C
4 D
4.
COL1 COL2
------ -----
1 A
2 B
3 C
1 A
4 D
3 C
ヒント:「副問い合わせの構文を覚える」
解答・解説へ
トランザクションに関する説明として正しいものを選択しなさい。
- あるトランザクションで変更中のデータをほかのトランザクションから参照することができる
- データを変更すると「REDOブロック」と呼ばれる変更前のイメージが保存される
- セーブポイントを使用することで、トランザクションの一部のみロールバックすることができる
- トランザクションは、COMMIT、ROLLBACKでのみ終了する
ヒント:「SQLでデータを自在に操作する」
解答・解説へ
オブジェクトに関する説明として正しいものを2つ選択しなさい。
- 問い合わせのパフォーマンスを向上させるには、シノニムを作成する
- 単純なビューであれば、ビューを経由して基礎となる表を更新することも可能である
- 大規模な表から非常に少ない行を取得するのが頻繁に行われる表に索引を作成するのが適切である
- ビューを作成するには、必ず基礎となる表が必要である
- 順序を使用することで常に一意で連続した番号を生成できる
解答・解説へ
次のSELECT文を使用した適切なビューの作成を行っているものを選択しなさい。
SELECT empno, ename, salary, salary * 12 FROM emp; |
- CREATE VIEW v_emp AS SELECT empno, ename, salary, salary * 12 yeas_sal FROM emp;
- CREATE VIEW v_emp AS SELECT empno, ename, salary, salary * 12 FROM emp;
- CREATE VIEW v_emp ON SELECT empno, ename, salary, salary * 12 yeas_sal FROM emp;
- CREATE VIEW v_emp ON SELECT empno, ename, salary, salary * 12 FROM emp;
ヒント:「SQLで便利なオブジェクトを使いこなす」
解答・解説へ
IT資格試験の模擬問題をWebベースで学習できる@IT自分戦略研究所の新サービス「@IT資格攻略」では、Bronze SQL 基礎 IをはじめOracle関連の資格をテーマとして取り上げています。Bronze DBA 10gも近日中に追加予定です。「無料お試し版」もありますので、記事と併せてご覧ください。 |
自分戦略研究所、フォーラム化のお知らせ
@IT自分戦略研究所は2014年2月、@ITのフォーラムになりました。
現在ご覧いただいている記事は、既掲載記事をアーカイブ化したものです。新着記事は、 新しくなったトップページよりご覧ください。
これからも、@IT自分戦略研究所をよろしくお願いいたします。