データ定義言語の概要
問10
JOBS表の構造を確認してください。
NAME NULL? TYPE --------------------- -------- ------------------ JOB_ID NOT NULL VARCHAR2(10) JOB_TITLE NOT NULL VARCHAR2(35) MIN_SALARY NUMBER(6) MAX_SALARY NUMBER(6)
JOB_ID列には主キー制約が、JOB_TITLE列にはNOT NULL制約が定義されています。
次のCREATE文を確認してください。
CREATE TABLE JOB_GRADE(JOBNO,JOBNAME,MINSAL,MAXSAL) AS SELECT * FROM JOBS;
JOG_GRADE表の作成に関して正しい記述はどれですか。最適なものを選択しなさい。
- a. MINSALとMAXSALはNUMBER(6)ではなく、NUMBERになる
- b. 主キー制約とNOT NULL制約は適用されない
- c. JOBNAMEのNOT NULL制約は適用され、JOBNOのNOT NULL制約は適用されない
- d. 主キー制約は適用されないが、JOBNOとJOBNAMEのNOT NULL制約は適用される
まず、実行結果を見てみましょう。
SQL> CREATE TABLE JOB_GRADE(JOBNO,JOBNAME,MINSAL,MAXSAL) 2 AS SELECT * FROM JOBS; 表が作成されました。 SQL> desc job_grade NAME NULL? TYPE --------------------- -------- ------------------ JOBNO VARCHAR2(10) JOBNAME NOT NULL VARCHAR2(35) MINSAL NUMBER(6) MAXSAL NUMBER(6)
実行結果から、選択肢cが正解であることが確認できます。
CREATE TABLE AS SELECT文でコピーされる制約は、NOT NULL制約のみです(選択肢bは不正解)。
主キー制約は、一意(UNIQUE)で必須(NOT NULL)であることを保証する制約ですが、その中の必須(NOT NULL)を保証する制約だけコピーされることはありません(選択肢dは不正解)。
CREATE TABLE AS SELECT文は、NOT NULL制約の他に、SELECT文に記述された条件に一致する行の値とデータ定義(データ型と有効桁数)をコピーします(選択肢aは不正解)。
本講座第10回の冒頭で、「制約は、CREATE TABLE AS SELECTまたはALTERとの合わせ技で出題されることが多いので要注意」とお伝えしたことを思い出してください。
* * *
いかがでしたか?復習になりましたか? 12cSQLの試験は難しいと私は思っています。だから、合格したらいっぱい自慢してくださいね。応援しています!

