問1 ..................................................................................................
住所表(ADDRESS)の社員番号には外部キーが設定されており、社員表(EMP)
の社員番号を参照します。社員が退職した場合、社員表からデータを削除しま
すが、住所表のデータについても同時に削除させるためのDELETE文のオプショ
ンとして適切なものを1つ選びなさい。
a. CASCADE
b. ON DELETE CASCADE
c. CASCADE DELETE
d. ON DELETE SET NULL
e. オプションはなくても、外部キーが設定されているため自動で削除される
→回答と解説
問2 ..................................................................................................
以下のSELECT文を実行し、検索されるデータ件数として正しいものを選びなさい。
SQL> DESC EMP
EMPNO ENAME MGR DEPTNO
----- ----- ----- ------
7369 SMITH 20
7499 ALLEN 7698 30
7521 WARD 7698 30
7566 JONES 20
7698 BLAKE 7839 30
SQL> SELECT * FROM emp WHERE empno NOT IN (SELECT mgr FROM emp);
a. 0
b. 1
c. 2
d. 3
e. エラーになる
→回答と解説
問3 ..................................................................................................
下記のSELECT文が実行時にエラーとなる理由として正しいものを選びなさい。
SELECT e.empno, e.ename, e.deptno, d.dname FROM emp e, dept d
WHERE emp.deptno = dept.deptno;
a. SELECT句では表別名は使用できない
b. SELECT句のDEPTNOは、表別名dでも修飾する必要がある
c. emp表・dept表の共通列は修飾する必要がない
d. emp表・dept表の共通列以外は修飾してはいけない
e. WHERE句で表別名を使用していない
→回答と解説
問4 ..................................................................................................
表のすべての行を削除します。DELETEではなくTRUNCATEを使用する利点として
ただしいものをすべて選びなさい。
a. DELETE文よりも高速である
b. 表領域内の使用領域を、他のオブジェクトで使用できるよう開放する
c. 表領域内の使用領域を、次回利用時のために予約しておくことができる
d. 削除後、ロールバックによりデータをもとに戻すことができる
e. 削除トリガーを起動することができる
→回答と解説
問5 ..................................................................................................
下記の、DEPT表の DNAME列を変更する ALTER文のうち、エラーとならないもの
をすべて選びなさい。尚、現在の DNAME列のデータ型はVARCHAR2(14)とします。
SQL> SELECT DNAME FROM DEPT;
DNAME
--------------
ACCOUNTING
RESEARCH
SALES
OPERATIONS
a. ALTER TABLE DEPT MODIFY(DNAME VARCHAR2(13));
b. ALTER TABLE DEPT MODIFY(DNAME VARCHAR2(15));
c. ALTER TABLE DEPT MODIFY(DNAME CHAR(13));
d. ALTER TABLE DEPT MODIFY(DNAME CHAR(15));
e. ALTER TABLE DEPT MODIFY(DNAME NOT NULL);
→回答と解説
問6 ..................................................................................................
下記の文章を読み、SELECT文の結果として正しいものを選びなさい。
SMITH は、従業員(EMP)表の給与(SAL)列値をすべて1.2倍するUPDATE文を発行
しました。その後、SMITHが COMMITを行う前に、ALLENが従業員表の給与列を
参照するSELECT文を発行しました。
a. SAL 列値は、1.2倍する前の値が返される
b. SAL 列値は、1.2倍した後の値が返される
c. SMITH が更新中のため、SELECT文はエラーとなる
d. SMITH がCOMMITを行うまでSELECT文は待機し、COMMITと同時に結果が返される
→回答と解説
問7 ..................................................................................................
関数の結果として誤っているものをすべて選びなさい。
a.「ceil(9.8)」の結果は「10」
b.「floor(9.8)」の結果は「9」
c.「mod(10,4)」の結果は「2」
d.「round(123.456,2)」の結果は「123.46」
e.「trunc(123.456,2)」の結果は「123.4」
→回答と解説
問8 ..................................................................................................
下記の SQL文にて作成された表に対する説明として、誤っているものを
すべて選びなさい。
SQL> CONNECT SCOTT/TIGER
SQL> CREATE TABLE EMP
2 (EMPNO NUMBER(4) NOT NULL,
3 ENAME VARCHAR2(10),
4 HIREDATE DATE,
5 SAL NUMBER(7,2));
a. EMP 表は、 SCOTTスキーマに作成される
b. EMP 表を削除する場合、COMMIT前であればROLLBACKを行う
c. EMP 表を削除する場合、COMMIT済みであればDELETEを行う
d. EMP 表作成時、表に含まれるデータは 0件である
e. INSERT INTO EMP VALUES(7369,'SMITH',sysdate,800); は正常に実行される
f. INSERT INTO EMP VALUES('SMITH',7369,sysdate,800); は正常に実行される
→回答と解説
問9 ..................................................................................................
SQL 文処理時、パフォーマンス向上のために再利用できるものを
下記の中から2つ選びなさい。
a. ログバッファ内のREDOログエントリ情報
b. UNDO表領域のUNDOデータ
c. バッファキャッシュ内のデータブロック
d. 共有プール内の実行計画
e. REDOログファイルの更新履歴データ
→回答と解説
問10 ................................................................................................
順序に関する定義情報を確認するためのオブジェクトとして当てはまるものを
2つ選びなさい。
a. USER_TABLES
b. USER_TAB_SEQUENCES
c. USER_SEQUENCES
d. USER_SYNONYMS
e. USER_OBJECTS
→回答と解説
参照整合性制約(FOREIGN KEY)の問題になります。
上記の場合、親表(参照表)である社員表の社員番号列(親キー)を、
住所表の社員番号列が外部キーとして参照しているということになります。
社員表に存在しない社員の住所は、住所表には登録できない・・という
ことですね。
外部キーを設定する時の約束事として、下記のようなものがあります。
・両方の列のデータ型が同一である
・親キー=主キーまたは一意キー
また、親表内の行を削除時、以下のようなオプションをDELETE文に付加す
ることができます。
・ON DELETE CASCADE :親表内の行削除時、子表の依存行削除
・ON DELETE SET NULL :親表内の行削除時、子表の列値をNULLに更新
親表に対応する列値がないと、子表のデータは存在してはいけないため、
逆に親表のデータを削除する際に、紐づく子表のデータも削除してしまおう
というのが「ON DELETE CASCADE」であり、子表のレコード自体は残したい
ので、NULLに更新しておこうというのが「ON DELETE SET NULL」です。
今回の場合は、EMP 表のデータ削除時にADDRESS表のデータも削除させたい
ため、「ON DELETE CASCADE」を使用します。
MGR 列にNULL値が存在することに注意してください。
上記のSELECT文を展開すると、下記のようになります。
SELECT * FROM emp WHERE empno NOT IN (NULL,7698,7698,NULL,7839);
よって、「()内の値とempnoが一致しないレコード数」を検索しています。
ここで、empnoとNULLの比較が行われていますが、このような比較におい
てNULL値との比較を行った場合は、結果もNULLになります。
NOT INですので、 empnoと()内の比較で1件でも比較結果にNULLがあれば、
結果はNULLになります。常に()内にはNULLが存在することから、検索結果
も常に0件となります。
上記のような等価結合では、どちらの表に列が存在するかを示すために、
列名の前に表名を修飾します。一方の表にしか存在しない列名であれば、
省略できます。
また、両方に存在する列の修飾を省略した場合、エラーになります。表
名が長い場合等、適切な別名をつけることができます。
問題文では、emp表に「e」、 dept表に「d」という別名をつけています
ので、WHERE 句でも別名を使用するようにします。
SELECT e.empno, e.ename, e.deptno, d.dname FROM emp e, dept d
WHERE e.deptno = d.deptno;
TRUNCATEによる表の切捨ての特徴は下記の通りです。
・ロールバックできない(DELETEはDML文、TRUNCATEはDDL文)
・処理が高速(ロールバックの為の情報を生成しないため)
・表内のすべての行を削除する(where句の指定不可)
・表が使用していた領域(エクステント)が開放される(初期エクステント以外)
・削除トリガーが起動しない
TRUNCATEが実行可能なのは、「表の所有者」「DROP ANY TABLEシステム権限
所有者」になります。
また、対象表にFK(参照整合性制約)が張られている場合、親表となるため
基本的にデータの切捨てができませんので、要注意です。
列の変更はALTER TABLE文にて行います。
ALTER TABLE [スキーマ名.]表名 MODIFY (列名 データ型 [,列名 データ型...]);
また、下記のような点に注意してください。
・列のサイズを大きくする操作は可能
・列のサイズを小さくする操作は、その表にデータが無い場合、または変更する
列がすべてNULL値の場合のみ可能
・NOT NULL制約を追加する操作は、その表にデータが無い場合、または変更する
列がすべてNULL値を含んでいない場合のみ可能
・列のデフォルト値を変更した場合、今後の挿入のみで有効(既存行は影響なし)
よって、現在のDNAME列のデータの最大長は「ACCOUNTING」「OPERATIONS」の10
バイトなので、選択肢 a〜dの操作はすべて可能です。
ただし、すでにNULL値が含まれているため、選択肢e はエラーとなります。
「読み取り一貫性」の問題です。
読み取り一貫性とは、変更を行うトランザクションにより、変更データが
コミットされる前に開始された読み取りトランザクションでは、変更前の
データが返されることを保証するしくみです。
・他のトランザクションが更新中のデータを検索した場合、更新前のデータ
が返される。
・自トランザクションが更新中のデータを自分で検索した場合、更新後のデ
ータが返される。
・他のトランザクションがデータを更新中であっても(COMMITしていなくて
も)、他のトランザクションからの検索は待たされない。
つまり、 SMITHがUPDATE文を発行し、そのCOMMIT前に ALLENがSELECT文を
発行したことから、読み取り一貫性では、 SMITHのUPDATE前の状態のデー
タがSELECT文の結果として返されます。
また、この変更前データは、UNDOセグメントに格納されています。
上記はすべて数値関数と呼ばれます。
■CEIL関数:CEIL(n) n以上の最も小さい整数を戻す
a.「ceil(9.8)」の結果は「10」
■FLOOR関数:FLOOR(n) n以下の最も大きい整数を戻す
b.「floor(9.8)」の結果は「9」
■MOD関数:MOD(m,n) mをnで割った余りを戻す
c.「mod(10,4)」の結果は「2」
■ROUND関数:ROUND(m,n)
・m を小数点以下 n桁に四捨五入 (n=1の場合、小数点以下二位を四捨五入)
・n が負の場合は小数点の左の n桁を四捨五入 (n=-1の場合、1の位を四捨五入)
・n を省略(またはn=0)すると小数点以下を四捨五入
d.「round(123.456,2)」の結果は「123.46」
■TRUNC関数:TRUNC(m,n)
・m を小数点以下 n桁に切り捨て (n=1の場合、小数点以下二位を切捨て)
・n が負の場合は小数点の左の n桁を切り捨て (n=-1の場合、1の位を切捨て)
・nを省略(またはn=0)すると小数点以下を切り捨て
e.「trunc(123.456,2)」の結果は「123.4」 ではなく、
→結果は「123.45」になります。
順番に確認しましょう。
「a.EMP 表は、 SCOTTスキーマに作成される」
はじめに、 「CONNECT SCOTT/TIGER」にて SCOTTユーザとして接続しています。
CREATE文実行時に、スキーマ名を指定せず EMP表を作成していますので、SCOTT
のスキーマに表が作成されます。
「b.EMP 表を削除する場合、COMMIT前であればROLLBACKを行う」
「c.EMP 表を削除する場合、COMMIT済みであればDELETEを行う」
DML文(INSERT/UPDATE/DELETE等)であれば、COMMIT前は ROLLBACK、COMMIT済み
であればDELETEを行い、データを削除します。しかし、CREATE文は DDL文ですの
で、ROLLBACKはできません。 EMP表を削除する場合は、DROP文を発行します。
「d.EMP 表作成時、表に含まれるデータは 0件である」
これは正しいです。
「e.INSERT INTO EMP VALUES(7369,'SMITH',sysdate,800); は正常に実行される」
「f.INSERT INTO EMP VALUES('SMITH',7369,sysdate,800); は正常に実行される」
INSERT文発行時、列名を指定していませんので、表作成時の列定義順序にあわせ
たVALUES句を記述する必要があります。よって、選択肢f は誤りとなります。
SQL 文を実行すると、SQL 文と実行計画は、再利用を可能にするために、共有
プールのライブラリキャッシュへ保存されます。SQL 文が実行される際、解析
済みのSQL 文が存在するか否かをライブラリキャッシュへ問い合わせ、再利用
を試みます。
また、該当データについて、バッファキャッシュ上を検索し、存在しない場合
は、データファイルからバッファキャッシュ上にデータを読み込みます。存在
する場合は、バッファキャッシュ上のデータを利用します。
従って、正解は「c」と「d」になります。
順序(シーケンス)は、一意な番号を生成するためのオブジェクトです。
詳細な情報を確認するには、「USER_SEQUENCES」を使用します。また、順序も
オブジェクトの一種ですので、「USER_OBJECTS」でも名前、所有者等が確認できます。
それ以外の選択肢は・・・
a. USER_TABLES :表定義の確認
b. USER_TAB_SEQUENCES :(存在しません)
d. USER_SYNONYMS :シノニム定義の確認
となっています。
Copyright © 2006 mari. All rights reserved. |
|