連載
» 2007年09月27日 00時00分 公開

さらっと覚えるSQL&T-SQL入門(8):SQL文でデータを追加・更新・削除する方法 (1/2)

アプリケーション開発でデータベースを利用する新人プログラマに向けて、SQLおよびT-SQLを短期間で理解できるよう、開発現場ですぐに必要となる内容を中心に解説する。(編集部)

[石橋潤一,株式会社システムインテグレータ]

主な内容

   --Page 1--
▼データを追加するINSERT文
▼列を省略したINSERT文
▼SELECTを利用したINSERT文
   --Page 2--
▼データの更新を行うUPDATE文
▼行の削除を行うDELETE文
▼まとめ


 これまで7回にわたってSELECT文の利用法を取り上げてきましたが、今回はデータの操作を行うための文、「INSERT」「UPDATE」「DELETE」を取り上げます。

 これらの命令文はそれぞれデータの追加、更新、削除といったデータの操作を行うためのものです。連載の第1回「初めてSQLコマンドを叩く緊張と感動の一瞬」でデータの操作を行う命令文をデータ操作言語(DML:Data Manipulation Language)と分類する、と解説しましたが、SELECT文と今回取り上げる命令文でDMLにひととおり触れることになります。DMLをマスターできれば、SQLの基本は把握できたことになるので、引き続きしっかりとその内容を把握していきましょう。

データを追加するINSERT文

 INSERTはデータを追加するための命令文です。具体的な構文は次のとおりです。

INSERT INTO テーブル名

 (列名1,列名2,……)

VALUES

 (値1,値2,……)


 まず、データの追加対象となるテーブル名を指定します。続いて「列名」には、テーブルを構成する列名を指定します。「値」には、列に登録するデータを記述していきます。列名1に値1を、列名2に値2を、という具合に列の順番と値の順番が対応しています。INSERT文ではこのように構文上、注意すべき点がいくつか存在します。

  • 指定する列の数と値の数は一致している必要がある
  • 指定した列と登録するデータの型が一致する必要がある
  • 指定しなかった列にはデフォルト値もしくはNULLが設定される

 それでは、具体的な例文を見てみましょう。ここでは、下記のような構成のテーブルに対し、データを登録してみます。SQLを実際に試す場合は、テーブルの作成をあらかじめ行っておきましょう。

テーブル名:Product
列名
ProductID int
ProductName varchar(20)
Price money

 上記テーブルに対して、1件データを登録するINSERT文は次のとおりです。

INSERT INTO Product
 (ProductID,ProductName,Price)
VALUES
 (1,'bag',9800)

 文字列型の列に値を登録する際は、「'」(シングルクォーテーション)で囲い、値を指定します。

列を省略したINSERT文

 データを追加するテーブルのすべての列に対し値を登録する場合は、列名の指定を省略することも可能です。この場合、値の指定はテーブルの定義に従った順番に並べる必要があるため、注意が必要です。

INSERT INTO Product
VALUES
 (2,'shoes',26000)

 列名を省略したINSERT文は手軽ではあるのですが、データの登録対象となる列を間違ったり、テーブルの定義が変更された場合にエラーが発生するなど問題となりやすいため、利用する場合は取り扱いに注意します。

 また、主キーなど一意制約のある列に対して、重複した値を登録しようとするとエラーとなります。INSERT文の発行に際しては一意制約違反が発生しやすいため、主キー項目などの取り扱いにも注意が必要です。先ほど利用したテーブルの「ProductID」列に主キーを設定し、重複した値を登録しようとすると、次のようなエラーが発生します。

INSERT INTO Product
 (ProductID,ProductName,Price)
VALUES
 (1,'bag',9800)
 
実行結果
-------------
メッセージ 2627、レベル 14、状態 1、行 1
制約 'PK_Product' の PRIMARY KEY 違反。オブジェクト 'dbo.Product' には重複したキーを挿入できません

SELECTを利用したINSERT文

 ここまで紹介したINSERT文は、データを1行ずつ登録するための構文でした。数件の登録であれば問題ありませんが、一度にたくさん登録を行いたい場合はなかなか面倒です。そのような場合は、INSERTとSELECTを組み合わせることによって、データを一括して登録できます。具体的には次のような構文になります。

INSERT INTO テーブル名

 (列名1,列名2,……)

SELECT 列名1,列名2,……

 FROM テーブル名2

 WHERE 条件式;


 このように、各列に対する値としてSELECT文の結果を登録することが可能です。SELECT文の結果が複数行となる場合、登録対象のテーブルには複数行のデータが登録されることになります。

 それでは早速具体的な例を見てみましょう。次の例ではまったく同じ構成のテーブルを利用し、データの登録を行っています。

INSERT INTO Product
 (ProductID,ProductName,Price)
SELECT ProductID,ProductName,Price
 FROM Product_bkup

 SELECT文を使えるということは、これまで取り上げたテーブルの結合や関数などさまざまな構文を利用できるため、INSERT文を発行する際にその多様性を生かすことが可能です。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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