様々な情報をデータベースに保存して管理するアプリケーションでは、C#などのプログラムを使用してテーブルにデータを録(追加)し、それを編集したり削除したりします。
プログラムからテーブルなどのデータベースのオブジェクトを操作する際は、SQLを使用してデータベースに命令を与えます。
データベースに情報を保存して管理するアプリケーションでは、SQLでのデータの操作が必須になります。
今回は、SQLを使用してテーブルにデータを挿入(追加・登録)する方法について紹介します。
目次
記事内で使用するサンプルテーブル
本記事では、テーブルにデータを挿入する際に次の「書籍」テーブルを使用します。
テーブル定義
テーブルには、「書籍ID」「書籍名」「ISBN」の3つの列を作成します。
列名 | データ型 | NULLを許容 | 主キー |
---|---|---|---|
書籍ID | int | NO | ○ |
書籍名 | nvarchar(100) | NO | |
ISBN | char(21) | NO | |
備考 | nvarchar(200) | YES |
テーブルを作成するCREATE文(SQL)
テーブルを作成するSQLは次のようになります。
1 2 3 4 5 6 7 |
CREATE TABLE 書籍 ( 書籍ID int NOT NULL PRIMARY KEY, 書籍名 nvarchar(100) NOT NULL, ISBN char(21) NOT NULL, 備考 nvarchar(200) NULL, ); |
テーブルにデータ(レコード)を挿入する命令(ステートメント)
テーブルにデータを挿入する際は「INSERT」ステートメントを使用します。
INSERTステートメントの構文は次のようになります。
1 2 3 4 |
INSERT INTO テーブル名 ( 列名1, 列名2, 列名3, ... ) VALUES ( 値1, 値2, 値3, ... ); |
INSERTステートメントでは、まず「INSERT」と記述し、INSERTの後に空白文字(スペースや改行など)を記述して、その後に「INTO」を記述します。
INTOの後には空白文字を挟んでテーブル名を記述します。
テーブル名の後には括弧「()」の中に値を設定する列名を記述します。
テーブルの列名を指定したら、次は各列に設定する値を記述します。
列名を記述した時と同様に、括弧「()」の中に値を記述します。
複数の列、値がある場合は、それをカンマ「,」で区切って記述します。
ちなみに、列名と値の列挙部分を改行して記述するとSQLが見やすくなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
INSERT INTO テーブル名 ( 列名1, 列名2, 列名3, ... ) VALUES ( 値1, 値2, 値3, ... ); |
データ挿入SQLの例
以下に「書籍」テーブルにデータ(レコード)を挿入するSQLの例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
INSERT INTO 書籍 ( 書籍ID, 書籍名, ISBN, 備考 ) VALUES ( 1, 'よくわかる SQL Server 入門', 'ISBN978-4-0000-0000-0', 'データベース関連の入門書' ); |
上記のSQLを実行すると、「よくわかる SQL Server 入門」という書籍の情報が1行テーブルに挿入されます。
列名の列挙部分と、値の列挙部分の数は同じにする必要があります。
列挙する数が違う場合は、エラーとなり次のようなエラーが返されます。
「VALUES 句で指定された値よりも INSERT ステートメントの列数が多すぎます。VALUES 句の値の数は、INSERT ステートメントで指定される列数と一致させてください。」
列名の列挙部分の順番と、値の列挙部分の順番は対応していますので、テーブルに作成されている列の順番通りでなくても問題ありません。
例えば以下のSQLは、先に示したSQLと同様の結果になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
INSERT INTO 書籍 ( 書籍ID, ISBN, 書籍名, 備考 ) VALUES ( 1, 'ISBN978-4-0000-0000-0', 'よくわかる SQL Server 入門', 'データベース関連の入門書' ); |
列の省略
テーブルにデータを挿入する際に列に値の設定を行わないものがあれば、その列を省略することができます。
例えば、「書籍」テーブルにINSERTする場合に「備考」列を省略すると、SQLは以下のような記述になります。
1 2 3 4 5 6 7 8 9 10 11 12 |
INSERT INTO 書籍 ( 書籍ID, 書籍名, ISBN ) VALUES ( 1, 'よくわかる SQL Server 入門', 'ISBN978-4-0000-0000-0' ); |
省略した列には、NULLが設定されます。
書籍ID | 書籍名 | ISBN | 備考 |
---|---|---|---|
1 | よくわかる SQL Server 入門 | ISBN978-4-0000-0000-0 | NULL |
省略した列にはNULLが設定されるので、省略した列のNULLが許容されていない場合は、当然エラーとなりINSERTステートメントの実行は失敗します。
失敗時は、以下のようなエラーメッセージが返されます。
「テーブル ‘テーブル名’ の列 ‘列名’ に値 NULL を挿入できません。この列では NULL 値が許可されていません。INSERT は失敗します。」
書籍テーブルの場合であれば、「書籍名」や「ISBN」ではNULLが許容されていませんのでエラーとなります。
「テーブル ‘Database.dbo.書籍’ の列 ‘書籍名’ に値 NULL を挿入できません。この列では NULL 値が許可されていません。INSERT は失敗します。」
列名の列挙部分の省略
テーブルに挿入する値(VALUES句に列挙する値)が、テーブルのすべての列に対するものである場合は、列名の記述(列挙部分)を省略することができます。
「書籍」テーブルであれば、「書籍ID」「書籍名」「ISBN」「備考」の4つの列がありますが、列名の列挙部分を省略すると次のようなSQLになります。
1 2 3 4 5 6 7 8 |
INSERT INTO 書籍 VALUES ( 1, 'よくわかる SQL Server 入門', 'ISBN978-4-0000-0000-0', 'データベース関連の入門書' ); |
列名の列挙部分を省略する場合は、VALUES句に列挙する値を列の並び順通りに指定する必要があります。
「書籍」テーブルの場合は、「書籍ID」「書籍名」「ISBN」「備考」の順に値を指定します。
複数の行を1度のSQLで挿入する
ここまでの例では、INSERTステートメントを使用して1行のデータを挿入してきましたが、INSERTステートメントでは複数の行を一度に挿入することもできます。
複数行を一括して挿入する場合は、VALUES句に指定している括弧「()」の部分をカンマ「,」で区切って記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
INSERT INTO 書籍 VALUES ( 1, 'よくわかる SQL Server 入門', 'ISBN978-4-0000-0000-0', 'データベース関連の入門書' ), ( 2, 'データベースの教科書', 'ISBN978-4-0000-0000-1', 'データベース学習用の教材' ); |
複数の行を1回の命令(INSERT文)で挿入する方法の詳細については、以下の記事にまとめていますので参考にしてください。