SQLでデータを操作するときの文法(INSERT/UPDATE/DELETE):Webブラウザで気軽に学ぶ実践SQL講座(13)(1/2 ページ)
SELECT文を理解したら、次はINTSERT、UPDATE、DELETEでデータ操作する感覚を覚えていこう。APEX環境と一般環境の違いも紹介しておく
これまでの連載では、SELECT文を使ってデータを検索するためのさまざまな構文を説明してきました。今回は、新たにデータを追加したり、データを変更したりするための構文を紹介します。
データを追加するSQL文(INSERT)
いままで使ってきたEMP表やDEPT表には、既にサンプルデータが用意されていました。例えば、SELECT文でDEPT表を見てみると図13-1のデータが登録されています。
SELECT * FROM dept;
今回は、DEPT表に新しいデータを追加してみましょう。
データを追加するには、INSERT文を使用します。INSERT文の基本的な構文は以下の通りです。INSERT INTO句に続けて、データを追加したい表名と列名を指定し、VALUES句にそれぞれの列に対応する値を指定します。
INSERT文の基本構文
INSERT INTO 表名 (列1, 列2, 列3・・・) VALUES (値1, 値2, 値3・・・) ;
それでは、実際に試してみましょう。例えば、DEPT表のdeptno列、dname列、loc列に、それぞれ「50」「総務部」「東京」という値を指定します。
INSERT INTO dept (deptno, dname, loc) VALUES (50,'総務部','東京');
データが挿入されると、「1 row(s) inserted」(日本語環境では「1行が作成されました」)が表示されます。
SELECT文で検索して、実際にデータが正しく挿入されたか確認してみましょう。
SELECT * FROM dept;
先ほど入力したデータが登録されていることが分かります。
全ての値が決定していない場合は? 特定の列のみを指定したINSERT文
データを登録する際に、全ての値が決まっていない(省略できる値がある)場合もあるでしょう。そのような場合には、値を入れたい列のみを指定します。
例えば、新しい部門を登録する際に、部門番号と部門名は決まっているが、場所が決まっていないという場合は、次の例のように、列名と値に部門番号と部門名のみを指定します。
INSERT INTO dept (deptno, dname) VALUES (60,'人事部');
大量の列を指定するのが面倒なときは? 列名を省略したINSERT文
INSERT文の基本的な構文は上記のとおりですが、「表にたくさんの列がある場合、全ての列を列挙するのは大変だな」と思われた方もいらっしゃるかもしれません。
表名の後の列名は、省略することもできます。省略した場合、表の列の定義順(つまり、「SELECT * FROM 表名」で検索した際に表示される順番)に、VALUES句に指定した値が挿入されます。
例えば、DEPT表のdeptno、dname、locという3つの列に対して、次のようにVALUES句で各列に入れる値を順番に指定することで、列名の指定を省略できます。
INSERT INTO dept VALUES (70,'人事部','大阪');
列名を省略する際の注意点:全ての値を定義しないとエラーが返る
このように列名を省略する場合には、表に定義されている列の数だけ、値を指定する必要があることに注意してください。例えば以下のように、3列から構成されるDEPT表に対して、2列分の値だけを指定すると、エラーが発生してデータは挿入されません。
INSERT INTO dept VALUES (80,'開発部');
このような場合には、省略したい列値の代わりに「NULL」を指定して、エラーを回避できます。
INSERT INTO dept VALUES (80,'開発部',null);
このように、列名を省略してデータをINSERTする方法は、テストのためにデータを登録したい場合には非常に便利です。しかし、アプリケーションやバッチ処理などでINSERT文を書く場合には注意が必要です。あとから列を追加した場合、実際の列の数と、指定している値の数が異なり、実行時にエラーになってしまう可能性があるためです。
アプリケーションやバッチ処理のなかでSQL文を書く際には、変更に対応しやすい構文で記述することが重要です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ここまでの例で、DEPT表に新しいデータを何件か登録しました。SELECT文で確認すると、以下のようなデータが入っています。
SELECT * FROM dept;
Copyright © ITmedia, Inc. All Rights Reserved.