
データを効率的に処理するエッセンスを教えます
連載: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ジャパン)
- 知られざるLTEのネットワーク構成 (2010/1/13)
LTEのネットワーク構成やプロトコルスタックを詳解。それぞれどんな役割を果たしているかを解説します - iPhoneアプリ内課金導入でガッチリもうけるのだ (2009/12/18)
「iPhoneのアプリ内課金ってどーよ?」 そんな疑問に答えるべく、アプリ内課金のサポート業務を行っている企業を直撃 - インターネット世界の住所の書き方 (2009/12/8)
TCP/IPネットワークであて先を特定する識別子、IPアドレスの構造やサブネットマスクの役割などを説明します - iPhoneアプリに広告を挿入してガッチリもうけるのだ (2009/11/16)
iPhoneアプリに広告を挿入して1日に50万円ももうけている!と聞き、その仕組みを知りたくて、日米のアドネットワーク企業に聞いた
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |











