データの追加(INSERT文)
テーブルにデータを追加するには INSERT 文を使用します。ここでは SQLite でテーブルにデータを追加する方法について解説します。すべてのカラムに値を指定してデータを追加する以外に、カラムを指定してデータを追加することもできます。
(Last modified: )
全てのカラムに値を指定してデータを追加する
テーブルにデータを追加するには INSERT 文を使います。いくつかの書式があるのですが、テーブルに含まれる全てのカラムに値を指定してデータを追加する場合の書式は次の通りです。
INSERT INTO テーブル名 VALUES(値1, 値2, ...);
対象となるテーブルに含まれるカラムと同じ数の値を指定します。値は記述された順にカラムに格納されていきますので、値を格納したいカラムの順番と同じ順番で値を指定して下さい。
それでは実際に試してみます。次のようなテーブルを作成しました。
create table user(id integer, name text, old integer, address text);
このテーブルには4つのカラム id 、 name 、 old 、address があります。このテーブルにデータを追加する場合は、4つの値をカラムの順番に沿って記述して追加します。例えば 1 、 'Yamada' 、 19 、 'Tokyo' のようです。では実際にデータを追加してみます。
insert into user values(1, 'Yamada', 19, 'Tokyo');
上記のように特にエラーが表示されなければデータの追加は成功です。同じようにデータを追加します。
insert into user values(3, 'Mori', 32, 'Kyoto');
insert into user values(5, 'Ueda', 27, 'Tokyo');
insert into user values(6, 'Mitsui', 20, 'Nagoya');
これでテーブルには4つのデータが追加されました。それでは SELECT 文を使ってテーブルからデータを取得してみます。
select * from user;
4つのデータが格納されており、値を記入した順番にカラムに格納されていることが確認できました。
----
なおカラムの数と追加するデータの数が一致していない場合エラーとなります。先ほどのテーブルでは4つのカラムがありましたが、3つの値だけを指定してデータを追加すると Error: table user has 4 columns but 3 values were supplied といったエラーとなります。
insert into user values(8, 'Nakajima', 35);
特定のカラムだけ値を指定し他のカラムにはデフォルトの値を格納したい場合は次に解説するカラムを指定する方法を使用して下さい。
特定のカラムだけに値を指定してデータを追加する
先ほどは全てのカラムに値を指定する方法を試しましたが、特定のカラムだけに値を指定しデータを追加することもできます。その場合、値が指定されなかったカラムにはデフォルトの値が格納されます。
カラムを指定する場合の書式は次の通りです。
INSERT INTO テーブル名(カラム1, カラム2, ...) VALUES(値1, 値2, ...);
値を格納したいカラムをテーブル名の後の ( から ) の間に指定します。複数のカラムがある場合はカンマ(,)で区切って記述して下さい。そして指定したカラムの数と同じだけの値を指定します。
データが追加された時、指定されたカラムには値が格納されますが、指定されなかったカラムには DEFAULT 制約が設定してあればデフォルトの値が格納され、 DEFAULT 制約が設定されていなければ NULL が格納されます。( DEFAULT 制約については「DEFAULT制約の使い方」を参照して下さい)。
それでは実際に試してみます。次のようなテーブルを作成しました。
create table user(id integer, name text, address text default 'no value');
テーブルには3つのカラムがあり、 address カラムにはデフォルト制約が設定されています。それではデータを追加してみます。まずは3つのカラムに全て値を指定してデータを追加します。
insert into user(id, name, address) values(1, 'Honda', 'Tokyo');
データの追加が完了しました。全てのカラムに値を指定して追加する場合は、このページの最初の方で解説した書式で次のように実行した場合と同じになります。
insert into user values(1, 'Honda', 'Tokyo');
次に2つのカラムだけに値を指定してデータを追加してみます。1つ目は id カラムと name カラムだけ、2つ目は id カラムと address カラムだけに値を指定してデータを追加します。
insert into user(id, name) values(2, 'Okada');
insert into user(id, address) values(3, 'Mori');
これでテーブルには先ほどのと合わせて3つのデータが追加されました。それでは SELECT 文を使ってテーブルからデータを取得してみます。
select * from user;
2つ目のデータを追加した時には address カラムの値を指定していなかったのですが、 address カラムにはデフォルト制約が設定されていたためデフォルト値である 'no value' が格納されています。3つ目のデータを追加した時には name カラムの値を指定していなかったので、デフォルト値である NULL が格納されています( NULL は画面上では何も表示されません)。
このようにテーブルに含まれるカラムの中で一部のカラムだけに値を指定してデータを追加することができます。
----
なおデータを追加する時に記述するカラムの順番はテーブルで定義されているカラムの順番通りである必要はありません。次の2つは同じ結果となりエラーにもなりません。
insert into user(id, name) values(2, 'Okada');
insert into user(name, id) values('Okada', 2);
ただ分かりにくくなりますので特に理由がなければテーブルで定義されているカラムの順番通りに記載されることをお勧めします。
値を指定せずにデータを追加する
値を1つも指定せずにデータを追加することもできます。この場合は全てのカラムにデフォルトの値が格納されます。
値を指定せずにデータを追加する場合の書式は次の通りです。
INSERT INTO テーブル名 DEFAULT VALUES;
それでは実際に試してみます。テーブルは先ほどと同じ下記のものをそのまま利用します。
create table user(id integer, name text, address text default 'no value');
値を指定せずにデータを追加します。
insert into user default values;
それでは追加されたデータを SELCT 文で取得して確認してみます。
select * from user;
追加されたデータは値が指定されていませんのでデフォルト制約が設定されていない id カラム、 name カラムにはデフォルト値の NULL が格納され、デフォルト制約が設定されている address カラムには設定されているデフォルト値が格納されました。
このように値を1つも指定せずにデータをテーブルに追加することが可能です。
-- --
INSERT 文を使ってテーブルにデータを追加する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。