データの追加
テーブルにデータを追加する方法について解説します。全てのカラムに値を指定してデータを追加する以外に、カラムを指定してデータを追加することもできます。
1.全てのカラムに値を指定
2.特定のカラムだけに値を指定しデータを追加
3.値を指定せずにデータを追加
テーブルにデータを追加するには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 テーブル名(カラム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文で取得して確認してみます。
追加されたデータは値が指定されていませんのでデフォルト制約が設定されていない「id」カラム「name」カラムにはデフォルト値のNULLが格納され、デフォルト制約が設定されている「address」カラムには設定されているデフォルト値が格納されました。
このように値を1つも指定せずにデータをテーブルに追加することが可能です。
( Written by Tatsuo Ikura )