連載
» 2012年10月23日 08時00分 UPDATE

Webブラウザで気軽に学ぶ実践SQL講座(13):SQLでデータを操作するときの文法(INSERT/UPDATE/DELETE) (1/2)

SELECT文を理解したら、次はINTSERT、UPDATE、DELETEでデータ操作する感覚を覚えていこう。APEX環境と一般環境の違いも紹介しておく

[須々木尚子(すすき なおこ),日本オラクル]

連載バックナンバー


 これまでの連載では、SELECT文を使ってデータを検索するためのさまざまな構文を説明してきました。今回は、新たにデータを追加したり、データを変更したりするための構文を紹介します。

データを追加するSQL文(INSERT)

 いままで使ってきたEMP表やDEPT表には、既にサンプルデータが用意されていました。例えば、SELECT文でDEPT表を見てみると図13-1のデータが登録されています。

SELECT * FROM dept;
mhdb_fig13_01.jpg 図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,'総務部','東京');
mhdb_fig13_02.jpg 図13-2 データの挿入を実行してみる

 データが挿入されると、「1 row(s) inserted」(日本語環境では「1行が作成されました」)が表示されます。

 SELECT文で検索して、実際にデータが正しく挿入されたか確認してみましょう。

SELECT * FROM dept;
mhdb_fig13_03.jpg 図13-3 図13-2の結果を確認する

 先ほど入力したデータが登録されていることが分かります。

全ての値が決定していない場合は? 特定の列のみを指定したINSERT文

 データを登録する際に、全ての値が決まっていない(省略できる値がある)場合もあるでしょう。そのような場合には、値を入れたい列のみを指定します。

 例えば、新しい部門を登録する際に、部門番号と部門名は決まっているが、場所が決まっていないという場合は、次の例のように、列名と値に部門番号と部門名のみを指定します。

INSERT INTO dept (deptno, dname)
VALUES           (60,'人事部');
mhdb_fig13_04.jpg 図13-4 列を指定してデータを挿入する

大量の列を指定するのが面倒なときは? 列名を省略したINSERT文

 INSERT文の基本的な構文は上記のとおりですが、「表にたくさんの列がある場合、全ての列を列挙するのは大変だな」と思われた方もいらっしゃるかもしれません。

 表名の後の列名は、省略することもできます。省略した場合、表の列の定義順(つまり、「SELECT * FROM 表名」で検索した際に表示される順番)に、VALUES句に指定した値が挿入されます。

 例えば、DEPT表のdeptno、dname、locという3つの列に対して、次のようにVALUES句で各列に入れる値を順番に指定することで、列名の指定を省略できます。

INSERT INTO dept 
VALUES           (70,'人事部','大阪');
mhdb_fig13_05.jpg 図13-5 列名を省略して挿入する

列名を省略する際の注意点:全ての値を定義しないとエラーが返る

 このように列名を省略する場合には、表に定義されている列の数だけ、値を指定する必要があることに注意してください。例えば以下のように、3列から構成されるDEPT表に対して、2列分の値だけを指定すると、エラーが発生してデータは挿入されません。

INSERT INTO dept 
VALUES           (80,'開発部');
mhdb_fig13_06.jpg 図13-6 値の指定を失敗するとエラーになった

 このような場合には、省略したい列値の代わりに「NULL」を指定して、エラーを回避できます。

INSERT INTO dept 
VALUES           (80,'開発部',null);
mhdb_fig13_07.jpg 図13-7 nullを指定するとデータが挿入できた

 このように、列名を省略してデータをINSERTする方法は、テストのためにデータを登録したい場合には非常に便利です。しかし、アプリケーションやバッチ処理などでINSERT文を書く場合には注意が必要です。あとから列を追加した場合、実際の列の数と、指定している値の数が異なり、実行時にエラーになってしまう可能性があるためです。

 アプリケーションやバッチ処理のなかでSQL文を書く際には、変更に対応しやすい構文で記述することが重要です。

◇ ◇ ◇

 ここまでの例で、DEPT表に新しいデータを何件か登録しました。SELECT文で確認すると、以下のようなデータが入っています。

SELECT * FROM dept;
mhdb_fig13_08.jpg 図13-8 新しいデータが挿入されている
       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。