前回作成したテーブルにデータを登録してみよう
今回は、データの登録を行うINSERT文を紹介します。前回(第11回「CREATE文をさらに使いこなそう」)では、「CardInfo」という名前の新しいテーブルを作成しました。今回はこのテーブルにデータを登録していきます。CardInfoテーブルの最新の定義の状態は次の画面のとおりになっているはずです。もう一度確認しておきましょう。
では、このテーブルに次のデータを登録します。
項目名 | 項目の定義 | 値 |
---|---|---|
カード番号 | 6けた数字のカード番号 | NW0001 |
顧客 | カード発行先の顧客 | ALFKI |
発行日 | 発行した年月日 | 2001/4/1 |
有効期限 | 有効期限の年月日 | 2002/4/1 |
発行した従業員 | カードを発行した従業員 | 7 |
発行ID | 発行通し番号 | ― |
顧客は、Customersテーブルに登録されているAlfreds Futterkiste社のMaria Anders氏で、顧客IDはALFKIです。また、カードを発行した従業員は、Employeesテーブルに登録されているKing Robert氏で、従業員番号は7です。発行IDはIDENTITY指定がしてあるので、データを指定しなくても自動的に採番されます。
では、このデータをCardInfoテーブルに登録してみましょう。次のSQL文を実行します。
【例1】
INSERT INTO CardInfo ( CardID, CustomerID, IssueDate, ExpireDate, EmployeeID ) VALUES ( 'NW0001', 'ALFKI', '2001/4/1', '2002/3/31', '7' )
構文の解説をする前に、データがぶじ登録されたことを確認しましょう。次のSQL文を実行します。
【例2】
SELECT * FROM CardInfo
データが登録されているのが確認できますね。IssueID列へはデータの指定をしませんでしたが、前回のテーブル作成時に初期値に指定した「1000000000」番が採番され、登録されているのも確認できます。
INSERT文の使い方
では、例1のSQL文を解読してみましょう。データの登録には「INSERT」文を使用します。INSERT文は、テーブルに行を新たに追加します。よって、例1を仮にもう一度実行したとすると、まったく同じ行がもう1行追加されてしまいます。本来のCardInfoテーブルの使用目的からすれば、同じカード番号のデータが複数登録されてしまうと不都合が起きますので、これを避けるための方法が別途用意されています。この解説は次回行います。
さて、INSERT文は、まずデータを登録するテーブルを指定するところから始まります。例1では「INTO CardInfo」としている部分が該当します。INTO句はテーブル名に引き続き、列の指定をします。( )の中に、データ登録に必要な列名をカンマで区切って並べます。列の定義時に「NULLの許可」をしなかった列(つまり必須の列)は、最低でも指定する必要があります。ただし、デフォルト値の指定をした列は、もし値の指定をしなかった場合にはデフォルト値が設定されるので、INTO句の列で指定することは必須ではありません。
INTO句の後には、さらにVALUES句が続きます。VALUES句にはINTO句で指定した列の順番に、登録する値をカンマ区切りで並べます。INSERT文の構文の基礎は、以上で終わりです。
では、デフォルト値の効果を確かめるために、次のSQL文を実行してみましょう。
【例3】
INSERT INTO CardInfo ( CardID, CustomerID, EmployeeID ) VALUES ( 'NW0008', 'ALFKI', '7' )
IssueDate、ExpireDateは指定しませんでしたが、それぞれ既定値にセットした値が登録されているのが確認できますね。
INSERT文は、すべての列に対して値を指定する場合には、INTO句を省略することが可能です。次の例を実行してみましょう。
【例4】
INSERT INTO CardInfo2 VALUES ( 'NW0010', 'ALFKI', '2001/4/1', '2002/3/31', '7' )
「CardInfo」テーブルを例4で使用しなかったのは、IDENTITY列に対してはINTO句による列の指定なしに値の指定をすることができない、という制約があるからです。つまり、IDENTITY列を持つテーブルに対しては、常にINTO句で列の指定をする必要があります。
INSERTとSELECTの組み合わせ
これまでの例では、データを1件ごとに登録する方法を紹介してきましたが、ほかのテーブルにあるデータを特定の条件で抽出して、テーブルに一括して登録する方法があります。これを紹介しましょう。
SELECT文の解説の中で「サブクエリー」を取り上げましたが、ここでもサブクエリーを使用します。例えば、すべての顧客に対して顧客IDと同じカード番号のカードを発行する場合には、次のようなSQL文でCardInfoテーブルにデータを登録することができます。
【例5】
INSERT INTO CardInfo ( CardID, CustomerID, EmployeeID ) SELECT CustomerID, CustomerID, 7 FROM Customers
これまでの例と違うのは、VALUES句の代わりにSELECT文を使用していることです。例5のSELECT文の個所が、サブクエリーになります。ここで注意が必要なのは、INTO句とSELECT文の列の並びを、順序、個数ともに正確に合わせることです。
今回のまとめ
今回は、INSERT文について解説しました。次回は、キー(主キー、外部キー)について解説をしていきます
- SQL Serverで「デッドロック」を回避する
- トランザクションの一貫性を保証するロック
- トランザクションを用いて注文登録をする
- トランザクションでデータの不整合を防ぐ
- テーブルで複数の処理を実行させるトリガー
- ユーザー定義関数を作成するストアドファンクション
- ストアドプロシージャによる繰り返し処理
- 条件分岐のあるストアドプロシージャ
- ストアドプロシージャの作成
- システム・ストアドプロシージャを用いたロールの詳細設定
- ロールを利用したグループ単位での権限設定
- SQL Serverのオブジェクトに権限を設定する
- Enterprise Managerによるビューの作成
- 作成したSELECT文をDBに登録する「ビュー」
- データの更新と主キーの重要性
- テーブル中のデータ識別に必要な主キーを定義する
- データの登録を行うINSERT文
- CREATE文をさらに使いこなそう
- CREATE文でテーブルを作成する
- SELECT文を統合する「UNION」
- サブクエリーの応用「相関サブクエリー」
- SELECT文の結果を抽出条件に使う
- テーブル結合のバリエーションを増やす
- テーブル結合の仕組みを理解する
- 異なるテーブル同士を結合する「JOIN」句
- 集計を行う「GROUP BY」句
- SELECT文で並べ替えを行うには?
- SQLの基礎 「SELECT」文を覚えよう
Copyright © ITmedia, Inc. All Rights Reserved.