データ定義言語の概要
問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の試験は難しいと私は思っています。だから、合格したらいっぱい自慢してくださいね。応援しています!