
データを効率的に処理するエッセンスを教えます
連載:SQL実践講座(12)
データの登録を行うINSERT文
篠原光太郎
2001/4/11
■前回作成したテーブルにデータを登録してみよう
今回は、データの登録を行うINSERT文を紹介します。前回(第11回「CREATE文をさらに使いこなそう」)では、「CardInfo」という名前の新しいテーブルを作成しました。今回はこのテーブルにデータを登録していきます。CardInfoテーブルの最新の定義の状態は次の画面のとおりになっているはずです。もう一度確認しておきましょう。
![]() |
| 画面1 前回定義した、CardInfoテーブルのプロパティを確認したところ(画面をクリックすると拡大表示します) |
では、このテーブルに次のデータを登録します。
|
顧客は、Customersテーブルに登録されているAlfreds Futterkiste社のMaria Anders氏で、顧客IDはALFKIです。また、カードを発行した従業員は、Employeesテーブルに登録されているKing Robert氏で、従業員番号は7です。発行IDはIDENTITY指定がしてあるので、データを指定しなくても自動的に採番されます。
では、このデータをCardInfoテーブルに登録してみましょう。次のSQL文を実行します。
| 【例1】 |
INSERT
INTO CardInfo ( |
![]() |
| 画面2 INSERT文でCardInfoテーブルにデータを挿入する(画面をクリックすると拡大表示します) |
構文の解説をする前に、データがぶじ登録されたことを確認しましょう。次のSQL文を実行します。
| 【例2】 |
SELECT * FROM CardInfo |
![]() |
| 画面3 SELECT文で、先ほど画面2で登録した内容が反映されているかを確認したところ(画面をクリックすると拡大表示します) |
データが登録されているのが確認できますね。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 ( |
![]() |
| 画面4 画面2のときよりもINSERT文で値を登録するカラムの数を減らしておいて、デフォルト値の設定が有効かどうかを確認してみる(画面をクリックすると拡大表示します) |
IssueDate、ExpireDateは指定しませんでしたが、それぞれ既定値にセットした値が登録されているのが確認できますね。
INSERT文は、すべての列に対して値を指定する場合には、INTO句を省略することが可能です。次の例を実行してみましょう。
| 【例4】 |
INSERT
INTO CardInfo2 |
「CardInfo」テーブルを例4で使用しなかったのは、IDENTITY列に対してはINTO句による列の指定なしに値の指定をすることができない、という制約があるからです。つまり、IDENTITY列を持つテーブルに対しては、常にINTO句で列の指定をする必要があります。
■INSERTとSELECTの組み合わせ
これまでの例では、データを1件ごとに登録する方法を紹介してきましたが、ほかのテーブルにあるデータを特定の条件で抽出して、テーブルに一括して登録する方法があります。これを紹介しましょう。
SELECT文の解説の中で「サブクエリー」を取り上げましたが、ここでもサブクエリーを使用します。例えば、すべての顧客に対して顧客IDと同じカード番号のカードを発行する場合には、次のようなSQL文でCardInfoテーブルにデータを登録することができます。
| 【例5】 |
INSERT
INTO CardInfo ( |
![]() |
| 画面5 SELECT文で抽出したデータをINSERT文でCardInfoテーブルに登録したところ(画面をクリックすると拡大表示します) |
これまでの例と違うのは、VALUES句の代わりにSELECT文を使用していることです。例5のSELECT文の個所が、サブクエリーになります。ここで注意が必要なのは、INTO句とSELECT文の列の並びを、順序、個数ともに正確に合わせることです。
|
| 「Master of IP Network総合インデックス」 |
TechTargetジャパン
- 実機では測定できない性能を測定? (2012/2/7)
システムの完成前に、達成し得る性能値や必要なサーバリソースを知るには? その解となる「性能シミュレーション技法」を解説 - 性能チューニング個所の検討 (2012/1/30)
アプリのチューニングや環境増強で、どの程度改善が見込める? 今回からは「実際に活用できる性能対策」を解説します - 遅いところを直すだけでいいのですか? (2012/1/24)
負荷が集中したときの性能ボトルネックを改善するのに、アプリケーションサーバとDB、どちらを優先すべきでしょう? - cloudfoundry.comを使ってみよう (2012/1/19)
VMwareが提供するPaaSプラットフォーム「CloudFoundry」。注目を集めるこの基盤を活用してPaaSを構築!
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -





