←ホームへ戻る




問1 ..................................................................................................

環境変数NLS_LANGの指定方法として正しいものを選びなさい。

a. NLS_LANG=Japanese_Japan.JA16SJIS
b. NLS_LANG=Japanese.Japan.JA16SJIS
c. NLS_LANG=Japan_Japanese.JA16SJIS
d. NLS_LANG=Japan.Japanese.JA16SJIS
      

→回答と解説



問2 ..................................................................................................

ユーザSCOTT が所有する EMP表を、ユーザALLEN が検索できるようにする
ために行う作業を下記の中から2つ選びなさい。ただし、ユーザALLEN に
は ALLENが所属する「DEPTNO=100」のデータのみを検索させるようにします。

a. CREATE TABLE ALLEN.EMP (EMPNO NUMBER(4),ENAME VARCHAR2(10),JOB VARCHAR2(9),
   HIREDATE DATE,SAL NUMBER(7,2),DEPTNO NUMBER(2)); 
b. CREATE SYNONYM T_EMP FOR EMP;
c. CREATE VIEW V_EMP AS SELECT * FROM EMP WHERE DEPTNO = 100; 
d. GRANT SELECT ON EMP TO ALLEN;
e. GRANT SELECT ON T_EMP TO ALLEN;
f. GRANT SELECT ON V_EMP TO ALLEN;
      

→回答と解説



問3 ..................................................................................................

以下のDDL 文について、エラーとなるものをすべて選びなさい。

a. ALTER TABLE EMP DROP CONSTRAINT FK_DEPTNO;
b. ALTER TABLE EMP DROP PRIMARY KEY;
c. ALTER TABLE EMP DROP UNIQUE(EMPNO);
d. ALTER TABLE EMP DROP CASCADE;
      

→回答と解説



問4 ..................................................................................................

以下の選択肢から、索引を作成する条件として適切なものをすべて選びなさい。

a. 列の値が一意な場合、ユニーク性が高い場合
b. NULL値が多く、NULL以外の検索をする
c. 頻繁に更新する表
d. WHERE 句の条件として頻繁に検索する
e. 大規模なデータ中から、2〜4%程度のデータを頻繁に検索する
f. データ量が少ない表
      

→回答と解説



問5 ..................................................................................................

下記の WHERE句と同じ働きをする条件文として当てはまるものを選びなさい。

SELECT * FROM EMP
WHERE SAL > any (800,1500,950,1600);

a. WHERE SAL > 800
b. WHERE SAL > 950
c. WHERE SAL > 1500
d. WHERE SAL > 1600
      

→回答と解説



問6 ..................................................................................................

表の作成についての説明のうち、誤っているものをすべて選びなさい。

SQL> connect scott/tiger

SQL> CREATE TABLE DEPT (DEPTNO NUMBER(2),DNAME VARCHAR2(14),LOC VARCHAR2(13));

a. 表はSCOTTのスキーマに作成される
b. INSERT文「INSERT INTO DEPT VALUES(10100,'SALES','CHICAGO');」を実行するとエラーとなる
c. DEPT表を作成すると、自動的に索引も作成される
d. ROLLBACKにより、表の作成を取り消す(削除)ことが出来る
e. 表は SCOTTのデフォルト表領域に作成される
      

→回答と解説



問7 ..................................................................................................

3つの表を結合するSELECT文として正しいものを選びなさい。

<EMP表>
名前      型
--------- -------------
EMPNO     NUMBER(4)
ENAME     VARCHAR2(10)
GRADE     NUMBER(2)
DEPTNO    NUMBER(2)


<DEPT表>
名前      型
--------- ---------------
DEPTNO    NUMBER(2)
DNAME     VARCHAR2(14)


<SALGRADE表>
名前      型
--------- ---------------
GRADE     NUMBER(2)
LOSAL     NUMBER(6)
HISAL     NUMBER(6)




a. SELECT e.empno,e.ename,d.dname,s.hisal
   FROM emp e,dept d,salgrade s;
b. SELECT e.empno,e.ename,d.dname,s.hisal
   FROM emp e,dept d,salgrade s
   WHERE e.deptno = d.deptno OR e.grade = s.grade;
c. SELECT e.empno,e.ename,d.dname,s.hisal
   FROM emp e,dept d,salgrade s
   WHERE e.deptno = d.deptno AND e.grade = s.grade;
d. SELECT e.empno,e.ename,d.dname,s.hisal
   FROM emp e,dept d,salgrade s
   WHERE e.deptno = d.deptno;
      

→回答と解説



問8 ..................................................................................................

EMP 表には以下のようなデータが格納されています。
EMP 表に対する検索の結果として誤っているものを選びなさい。

SQL> select SAL from EMP;

ENAME SAL
----- ----
SMITH 1250
ALLEN  900
CLARK 1800
JAMES 1400


a. 「select max(SAL) from EMP;」の結果は「1800」
b. 「select ENAME,lpad(SAL,6,'*') from EMP where ENAME='ALLEN';」の結果は「900***」
c. 「select lower(ENAME) from EMP where ENAME='ALLEN';」の結果は「allen」
d. 「select sum(SAL) from EMP;」の結果は「5350」
      

→回答と解説



問9 ..................................................................................................

DEPT表に対して実行した際に、エラーとならないものをすべて選びなさい。

SQL> SELECT * FROM dept;

DEPTNO DNAME
------ ----------
    10 ACCOUNTING
    20 RESEARCH
    30 SALES
    40 OPERATIONS

・DEPTNO列:主キー
・DNAME列:NULL可

a. INSERT INTO DEPT VALUES(50,'SYSTEM');
b. INSERT INTO DEPT VALUES(20,'PR');
c. INSERT INTO DEPT VALUES(60);
d. UPDATE DEPT SET DEPTNO=10 WHERE DNAME='SALES';
e. INSERT INTO DEPT(DNAME) VALUES('SYSTEM');
      

→回答と解説



問10 ................................................................................................

SQL*Plusを使用し、EMP 表にある ENAME列の書式を設定するコマンドとして
正しいものを選びなさい。

a. column ename format A50
b. set column ename format A50
c. column ename on emp format A50
d. set column ename on emp format A50
e. define ename format A50
      

→回答と解説



回答と解説(問1)・・・答え:a
NLS_LANG環境変数は、以下のように指定します。

NLS_LANG=言語_地域.文字コードセット

・言語:Oracleのメッセージ、月日の名前等
・地域:デフォルトの日付書式、十進数の表示規定等
・文字コードセット:接続するユーザやアプリケーションが使用する文字コード

デフォルトでは英語になりますが、日本語を使用する場合は、
「Japanese_Japan.JA16EUC」「Japanese_Japan.JA16SJIS」という風に指定します。
      



回答と解説(問2)・・・答え:c,f
まず、ユーザ ALLENが所属する「DEPTNO=100」のみを検索できるよう、ビューを作成します。

「c.CREATE VIEW V_EMP AS SELECT * FROM EMP WHERE DEPTNO = 100;」

このビューに対するSELECT権限を、ユーザALLEN に与えます。

「f.GRANT SELECT ON V_EMP TO ALLEN;」
      



回答と解説(問3)・・・答え:d
制約の削除についての問題です。制約の削除構文は、

ALTER TABLE [スキーマ名.]表名
DROP {CONSTRAINT 制約名 | PRIMARY KEY | UNIQUE (列名 [,列名...])} [CASCADE];


PK、UNIQUE制約を削除すると、制約に紐づく一意索引も同時に削除されます。

また、FOREIGN KEY 制約は、親表の主キー(PK)や一意キー(UNIQUE)を参照
しているため、参照されている親キーとしてのPKやUNIQUE制約を削除する
ことができません。
その場合、 CASCADEオプションを指定すると、依存(参照)しているFOREIGN
KEY もPKやUNIQUE制約と同時に削除することができます。

CASCADE オプションを使用しない場合は、先に参照しているFOREIGN KEY
制約を削除してから、PKやUNIQUE制約を削除するなどの手順が必要です。


選択肢「d」では、削除対象の制約が分かりません。CASCADE オプションは
「DROP PRIMARY KEY」や「DROP UNIQUE()」」と一緒に指定します。
      



回答と解説(問4)・・・答え:a,b,d,e
一般的に、索引の作成に適する条件には以下のようなものがあげられます。

・大規模なデータの中から、2〜4%程度のデータを頻繁に検索する
・検索対象の列の値が一意である、またはユニーク性が高い
・WHERE 句・結合条件として頻繁に検索する
・NULL値が多く、NULL以外の値を検索する

また、表に主キーや一意キーが設定されている場合、キーに対する索引が
自動的に作成されます。


表データが更新されると、索引も同時にメンテナンスされるため、頻繁に
更新を行う表に対し索引を作成した場合、検索処理は早くても、更新処理
のパフォーマンスが劣化する場合があります。特に、複数の索引を1つの
表に作成する場合は、注意が必要です。

尚、データ量が少ない場合、索引を作成してもあまり効果が得られない場
合があります。索引を無理に作成せず、表の全表走査をさせるという選択
肢もありでしょう。

従って、正解は選択肢「a,b,d,e」になります。
      



回答と解説(問5)・・・答え:a
複数行条件には、次のような種類があります。
IN		副問合せの結果のいずれかと等しい
NOT IN	副問合せの結果のいずれかと等しくない
=ANY	IN と同じ
>ANY	副問合せの結果の最小値より大きい
<ANY	副問合せの結果の最大値より小さい
>ALL	副問合せの結果の最大値よりも大きい
<ALL	副問合せの結果の最小値よりも大きい 

よって、 SAL列値が(800,1500,950,1600)の中の最小値より大きい、
という条件であるため、正解は選択肢「a」となります。
      



回答と解説(問6)・・・答え:cd
表の作成の基本構文は、以下のようになります。(もちろん、他にも指定で
きるオプションは色々あります。)

CREATE TABLE [スキーマ名.]表名
 (列名 データ型
 [,列名 データ型...])
[TABLESPACE 表領域名];


まず、「スキーマ名.表名」の指定で、どのスキーマにどのような名前の表を
作成するかを指定します。 この時、スキーマ名を省略した場合は、CREATE文
を発行しているユーザのスキーマに作成されます。(今回は、SCOTTユーザで
接続し、CREATE文にてスキーマ名を省略しているため、SCOTTのスキーマに表
が作成されます)・・・選択肢a

また、表を作成する表領域を TABLESPACE句にて指定します。これを省略した
場合は、ユーザ(今回はSCOTT)のデフォルト表領域に作成されます。デフォ
ルト表領域は、ユーザの作成時に指定できます。・・・選択肢e

このCREATE TABLE文は、DMLではなく DDLであるため、ROLLBACKはできません。
間違った表を作成してしまった場合などは、 DROP TABLE文にて削除をする必
要があります。・・・選択肢d


その他の選択肢を見てみましょう。
「b.INSERT文「INSERT INTO DEPT VALUES(10100,'SALES','CHICAGO');」を
    実行するとエラーとなる」

これは正しい動作です。表の列は、CREATE文の表名の後に、「列名+データ型」
を()で囲って指定します。複数の列を記述するには、カンマで区切ります。
最初の列(DEPTNO)はデータ型がNUMBER(2) となっていますので、「10100」
をINSERTすることはできません。

最後に
「c.DEPT表を作成すると、自動的に索引も作成される」ですが、こちらは
間違いです。表を作成した際に自動的に作成される索引としては、表に一意
制約・主キー制約が定義されている場合に作成される索引があります。
今回は、制約の定義はされていませんので、索引は自動では作成されません。
      



回答と解説(問7)・・・答え:c
3つの表を結合するには、結合条件は2つ以上必要です。

EMP表とDEPT表の結合条件は、「DEPTNO列」、
EMP表とSALGRADE表の結合条件は、「GRADE列」になります。

選択肢「a」「d」は結合条件が足りません。
また選択肢「b」は「OR」ではなく「AND」である必要があります。

よって、正解は「c」となります。
      



回答と解説(問8)・・・答え:b
関数の使用方法と実行例を以下に示します。(Oracleで提供されている関数の一部です)

■LPAD関数
LPAD(char1,n,char2)  char1をn桁になるように左にchar2を埋めて戻す

SQL> select ENAME,lpad(SAL,7,'*') from EMP where ENAME='ALLEN';
ENAME  LPAD(SAL,7,'*')
------ ---------------
JAMES  ****900


■RPAD関数
RPAD(char1,n,char2)  char1をn桁になるように右にchar2を埋めて戻す

SQL> select ENAME,rpad(SAL,7,'*') from EMP where ENAME='ALLEN';
ENAME  RPAD(SAL,7,'*')
------ ---------------
JAMES  900****

■UPPER関数
UPPER(char)  char文字列を大文字にして戻す

SQL> select upper ('sql') from dual;
UPPER('sql')
--------------
SQL

■LOWER関数
LOWER(char)  char文字列を小文字にして戻す

SQL> select lower('SQL') from dual;
LOWER('SQL')
--------------
sql

■MAX関数
MAX(expr)  exprの最大値を求める

SQL> select max(SAL) from EMP;
MAX(SAL)
--------
    1800

■MIN関数
MIN(expr)  exprの最小値を求める

SQL> select min(SAL) from EMP;
MIN(SAL)
--------
     900

■SUM関数
SUM(n)  nの合計値を戻す

SQL> select sum(SAL) from EMP;
SUM(SAL)
--------
    5350
      



回答と解説(問9)・・・答え:a
上記のDEPT表における制約は、以下のようになります。
・DEPTNO列の値は重複してはいけない(主キー)
・DEPTNO列の値はNULL不可(主キー)
・DNAME列の値は、重複及びNULL可

選択肢「b」「c」「d」「e」がエラーとなる原因は、
・「b」 DEPTNOが重複する
・「c」 INSERTする列データが足りない。DNAME列を指定しない場合は、
        選択肢e のように、「INSERT INTO DEPT(DEPTNO) VALUES(60);」とする
・「d」 DEPTNO列を「30」→「10」にすると、DEPTNO列が重複する
・「e」 DEPTNO列に値が指定されていない(主キーはNOT NULLなので指定が必須)
      



回答と解説(問10)・・・答え:a
SQL*Plusにて、列の見出しや書式を設定する場合は、「COLUMN」にて設定します。
・COLUMN 列名 FORMAT 書式				:表示幅や書式指定
・COLUMN 列名 NEW_VALUE 列名を保存する変数名		:変数に列名を保存
・COLUMN 列名 HEADING '列見出し'			:列見出しを指定
・COLUMN 列名 JUSTIFY RIGHT(LEFT/CENTER) 		:見出しを左・右・中央揃え
      












Copyright © 2006 mari. All rights reserved.