Oracleデータベースエンジニアとしての基礎力を証明するORACLE MASTER Bronze。その取得を目指すITエンジニアのための講座が本連載だ。間違いやすいポイントを確認し、合格に近づこう!
前回「SQLの副問い合わせを使いこなす」では、副問い合わせの基礎、副問い合わせで使用する比較演算子について学習しました。
今回は、以下の項目を確認します。
■例題1
EMPLOYEES表にINSERTで正しく行を追加しているSQL文を、次の中からすべて選択してください。
a.insert into employees(empno,ename,jobid)
values(300,'JACK',30);
b.insert into employees(empno,ename,jobid)
values(300,'JACK');
c.insert into employees(empno,ename,jobid)
values(300,'JACK',default);
d.insert into employees(empno,ename,jobid)
values(300,JACK,30);
■例題の範囲をおさらい
参考:「SQLでデータを自在に操作する」
表に新しく行を挿入するには、INSERT文を使用します。
INSERT INTO 表名 [(列名1, 列名2, ...)] VALUES (値1, 値2, ...);
■正解
a、c
■解説
選択肢a:このSQL文を実行した結果は以下のようになります。
SQL> insert into employees(empno,ename,jobid) 2 values(300,'JACK',30); 1行が作成されました。
このSQL文は、正しく行を追加しているといえます。
選択肢b:このSQL文を実行すると、以下のようにエラーとなります。
SQL> insert into employees(empno,ename,jobid) 2 values(300,'JACK'); values(300,'JACK') * 行2でエラーが発生しました。: ORA-00947: 値の個数が不足しています。
選択肢aのSQL文と異なり、指定した列の数とVALUES句に指定した値の数が異なるため、エラーとなります。
選択肢c:このSQL文を実行した結果は以下のようになります。
SQL> insert into employees(empno,ename,jobid) 2 values(300,'JACK',default); 1行が作成されました。 SQL> select * from employees 2 where ename='JACK'; EMPNO ENAME JOBID ---------- ---------------------------------------- ------------- 300 JACK 50
DEFAULTというキーワードは、列の初期値を指定します。もし初期値がなければ、代わりにNULL値が入ります。
今回の例では、初期値は50となっています。特に主キーの設定やNOT NULL制約が行われているという前提がなく、指定した列の数とVALUES句に指定した値の数が合っていますので、何ら問題はありません。
選択肢d:このSQL文を実行すると、以下のようにエラーとなります。
SQL> select * from employees 2 values(300,JACK,30); values(300,JACK,30) * 行2でエラーが発生しました。: ORA-00933: SQLコマンドが正しく終了されていません。
VALUES句に指定した「JACK」という文字がシングルクオーテーション(' ')で囲まれていないため、エラーとなります。文字や日付にはシングルクオーテーションが必要となりますので注意してください。
よって、正しく行を追加しているSQL文はa、cです。
Copyright © ITmedia, Inc. All Rights Reserved.