アプリケーション開発でデータベースを利用する新人プログラマに向けて、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 INTO テーブル名
(列名1,列名2,……)
VALUES
(値1,値2,……)
まず、データの追加対象となるテーブル名を指定します。続いて「列名」には、テーブルを構成する列名を指定します。「値」には、列に登録するデータを記述していきます。列名1に値1を、列名2に値2を、という具合に列の順番と値の順番が対応しています。INSERT文ではこのように構文上、注意すべき点がいくつか存在します。
それでは、具体的な例文を見てみましょう。ここでは、下記のような構成のテーブルに対し、データを登録してみます。SQLを実際に試す場合は、テーブルの作成をあらかじめ行っておきましょう。
テーブル名:Product | |
列名 | 型 |
ProductID | int |
ProductName | varchar(20) |
Price | money |
上記テーブルに対して、1件データを登録するINSERT文は次のとおりです。
INSERT INTO Product (ProductID,ProductName,Price) VALUES (1,'bag',9800)
文字列型の列に値を登録する際は、「'」(シングルクォーテーション)で囲い、値を指定します。
データを追加するテーブルのすべての列に対し値を登録する場合は、列名の指定を省略することも可能です。この場合、値の指定はテーブルの定義に従った順番に並べる必要があるため、注意が必要です。
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' には重複したキーを挿入できません
ここまで紹介した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文を発行する際にその多様性を生かすことが可能です。
Copyright © ITmedia, Inc. All Rights Reserved.