問1 ..................................................................................................
下記の DDL文を使用して表を作成しました。エラーとなる文を2つ選びなさい。
create table EMP (id number(4) primary key,
name varchar(10) null,
job varchar(10) default '-' not null);
a. insert into EMP(id) values(9992);
b. insert into EMP values(9992,null);
c. update EMP set JOB=default;
d. update EMP set JOB=null;
e. delete from EMP where id=9992;
→回答と解説
問2 ..................................................................................................
以下の SQL文の実行結果として正しいものを選びなさい。
EMP表
ID NAME JOB SAL
---- ----- -------- -----
9992 JANE CLERK 900
9993 SCOTT SALESMAN 2000
9995 TOM SALESMAN 1500
9999 MARY CLERK 1000
select count(*) from EMP where job = (select JOB from EMP where NAME = 'NICK');
a. 0
b. 1
c. 2
d. 3
e. エラー
→回答と解説
問3 ..................................................................................................
シノニムを確認するために使用するデータディクショナリビューに関する説明として
正しいものをすべて選びなさい。
a. USER_SYNONYMSでプライベートシノニム名とオブジェクト名を確認する
b. USER_OBJECTSでプライベートシノニム名を確認する
c. USER_PUB_SYNONYMSでパブリックシノニム名とオブジェクト名を確認する
d. ALL_SYNONYMSでプライベートシノニム名とオブジェクト名を確認する
e. ALL_SYNONYMSでパブリックシノニム名とオブジェクト名を確認する
→回答と解説
問4 ..................................................................................................
NULL値が入っているデータを検索する際、NULLではない値に変換することができます。
下記の中から、NULL値をNULL以外の値に変換する際に使用できる関数をすべて選びなさい。
a. NVL
b. NVL2
c. DECODE
d. COALESCE
e. NULLIF
→回答と解説
問5 ..................................................................................................
ユーザADMINおよびSCOTTにオブジェクト権限を付与します。
下記より、正しい SQL文を選びなさい。
a. grant update(id), select on emp to admin and scott;
b. grant update(id), select on emp to admin,scott;
c. grant update(id) on emp,select on emp to admin and scott;
d. grant update(id) on emp,select on emp to admin,scott;
e. grant update(id) and select on emp to admin,scott;
→回答と解説
問6 ..................................................................................................
SQL*Plusのコマンドではないものをすべて選びなさい。
a. CREATE
b. DESC
c. GET
d. DESCRIBE
e. SAVE
f. COMMIT
→回答と解説
問7 ..................................................................................................
既存のビューを更新する下記の SQL文の空欄を埋め、文を完成させなさい。
create _______ view v_emp1 as select * from emp where job = 'MANAGER';
a. new
b. or replace
c. force
d. noforce
e. なにも入れない
→回答と解説
問8 ..................................................................................................
下記の SQL文を実行した場合、表示される列見出しを選びなさい。
select empno, ename || ' is a ' || job "EMP_info" from emp;
a. EMPNO ENAME JOB
b. EMPNO EMP_info
c. EMPNO EMP_INFO
d. empno ename job
e. empno emp_info
f. EMP_INFO
→回答と解説
問9 ..................................................................................................
外部キー制約に関する説明として、誤っているものをすべて選びなさい。
a. Primary Key制約とも呼ばれる
b. 参照整合性制約とも呼ばれる
c. 1つまたは複数の列の組み合わせで指定する
d. 子表の外部キー値は、親表の主キーまたは一意キー値と一致するか、NULLである必要がある
e. 自表を親表にすることはできない
→回答と解説
問10 ................................................................................................
下記のSELECT文について、それぞれの句の順番がエラーにならないものをすべて選びなさい
a. SELECT - FROM - WHERE - ORDER BY - GROUP BY - HAVING
b. SELECT - FROM - WHERE - ORDER BY - HAVING - GROUP BY
c. SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY
d. SELECT - FROM - WHERE - GROUP BY - ORDER BY - HAVING
e. SELECT - FROM - WHERE - HAVING - GROUP BY - ORDER BY
→回答と解説
JOB 列は「NOT NULL制約」が指定されていますが、INSERT時に値を省略した場合でも、「デ
フォルト値」が指定されているので、「-」が入力されます(a)。また、明示的に default
を指定しても、デフォルト値がINSERTされます(c)。
上記のように、INSERT文でNULLを指定すると、エラーになります(b,d)。
まず、 SQL文を二つに分けて考えます。
select count(*) from EMP where job = (select JOB from EMP where NAME = 'NICK');
副問い合わせの結果は、nullが戻されます。
select JOB from EMP where NAME = 'NICK'
よって、
select count(*) from EMP where job = null;
となりますので、「job=null」は常にnullです。
従って、count関数の結果は0件になります。
シノニム名・オブジェクト名を確認するビューは下記になります。
・USER_SYNONYMS:所有するプライベートシノニム名・オブジェクト名の確認
・ALL_SYNONYMS:パブリックシノニム名・オブジェクト名
・USER_OBJECTS:所有するプライベートシノニム名
それぞれの関数の使用方法は、下記のようになります。
■NVL関数
NVL(expr,val) exprの値がNULLの場合valを、NULL以外であればexprを戻す
SQL> select ENAME,COMM,nvl(COMM,0) from EMP where ENAME in ('SMITH','ALLEN');
ENAME COMM NVL(COMM,0)
------- ------ -----------
SMITH 0
ALLEN 300 300
■NVL2関数
NVL2(expr,val1,val2) exprの値がNULL以外であればval1を戻す
exprの値がNULLの場合val2を戻す
SQL> select ENAME,COMM,nvl2(COMM,COMM+100,0) COMM2 from EMP
where ENAME in ('SMITH','ALLEN');
ENAME COMM COMM2
------- ------ -----------
SMITH 0
ALLEN 300 400
■NULLIF関数
NULLIF(expr1,expr2) expr1とexpr2を比較し等しい場合はNULL、等しくない場合はexpr1を戻す
SQL> select ENAME,DEPTNO,nullif(DEPTNO,10) from EMP where ENAME in ('SMITH','KING');
ENAME DEPTNO NULLIF(DEPTNO,10)
------- ------ -----------------
SMITH 20 10
KING 10
■COALESCE関数
COALESCE(expr1,expr2…exprn) exprの中の最初のNULLでないexprを戻す
すべてNULLの時はNULLを戻す
SQL> select ENAME,SAL,COMM,coalesce(COMM,SAL) from EMP
where ENAME in ('SMITH','ALLEN');
ENAME SAL COMM COALESCE(COMM,SAL)
----------- ----- ----- -------------------
ALLEN 1600 300 300
SMITH 800 800
オブジェクト権限を付与するには、下記の SQL文を実行します。
GRANT オブジェクト権限[(列名)]
ON オブジェクト名
TO {ユーザ名 | ロール名 | PUBLIC} [WITH GRANT OPTION];
オブジェクト名、およびユーザ名・ロール名は複数指定できます。複数指定する場合は、
それぞれをカンマ(,)で区切ります。
各SQL*Plusコマンドの使用方法は、
■DESC・DESCRIBE
表の定義情報を確認する。「DESC [所有者名.]表名」
■GET
スクリプトファイルの内容を SQLバッファにロードする。「GET ファイル名」
■SAVE
SQL バッファ内の SQL文をファイルに保存する。「SAVE ファイル名 [APPEND | REPLACE]」
「APP[END]」は追記、「REP[LACE]」は上書きになります。
■ビューの作成構文
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW ビュー名 [(列名,列名,・・・)] AS SELECT文
[WITH CHECK OPTION[CONSTRAINT 制約名]]
[WITH READ ONLY [CONSTRAINT 制約名]];
※制約名を省略した場合は、SYS_Cn書式で名前が作成される
※FORCE・NOFORCEオプション
元表の定義の有無のチェックを制御できる。 FORCEオプションを指定すると、元表が未定義で
もビューを作成可能。デフォルトは NOFORCEオプションが適用され、元表が未定義の場合には
ビューの作成が成功しない。
※WITH READ ONLYオプション
読取専用のビューを作成する。
列見出しは、デフォルトで大文字になります。列名表示を変更するには、「列名 列別名」
または「列名 AS 列別名」で指定します。
上記は、empno列 と ename列+job列(別名EMP_info) なので、列見出しは「EMPNO EMP_info」
となります。
外部キー制約(Foreign Key制約、参照整合性制約)は、参照元の列は外部キー、参照先の
列は親キーと呼ばれ、親子関係を保つ制約です。外部キー値がNULLであるか、または親キー
の値に一致する必要があります。
また、親キーの値を削除する場合に、子となるレコードがいる場合は削除できません。(ON
DELETE CASCADE オプションを使用する場合を除く)
そして、参照先の列(親キー)には、主キーまたは一意キー制約が定義されている必要があ
ります。親表として、自表の別の列を参照することも可能です。
※下記の例は、子表のDEPTNO列が親表のDEPTNO列を参照する外部キー制約です
○子表 ○親表
NAME DEPTNO DEPTNO DEPTNAME
----- ------ ------ ------------
SCOTT 0001 ----------> 0001 SALES
JOHN 0002 ----------> 0002 CLERK
SELECT文を記述する場合は、下記の語順になります。
・SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY
・SELECT - FROM - WHERE - HAVING - GROUP BY - ORDER BY
「GROUP BY」「HAVING」についてはどちらの順番でも記述できますが、
「ORDER BY」は最後に記述するようにします。
Copyright © 2006 mari. All rights reserved. |
|