Help us understand the problem. What is going on with this article?

【SQLite3】データの追加 (INSERT文)

INSERT文を使ってテーブルにデータを追加する方法について記録します。
全てのカラムに値を指定してデータを追加する以外に、カラムを指定してデータを追加することもできます。

全てのカラムに値を指定してデータを追加する

書式
INSERT INTO テーブル名 VALUES(1, 2, ...);

対象となるテーブルに含まれるカラムと同じ数の値を指定します。
値は記述された順にカラムに格納されていきますので、値を格納したいカラムの順番と同じ順番で値を指定します。

テスト用にテーブルを作成します。

CREATE TABLE testUSER(id INTEGER, name TEXT, old INTEGER, address TEXT);

このテーブルには4つのカラム id、name、old、addressがあります。
このテーブルにデータを追加する場合は、4つの値をカラムの順番に沿って記述して追加します。
例えば 1、'Yamada'、19、'Tokyo'です。では実際にデータを追加してみます。

INSERT INTO testUSER VALUES(1, 'Yamada', 19, 'Tokyo');

エラーが出ないことを確認して、引き続き下記のように、データを追加します。

INSERT INTO testUSER VALUES(2, 'Mori', 32, 'Kyoto');
INSERT INTO testUSER VALUES(3, 'Ueda', 27, 'Tokyo');
INSERT INTO testUSER VALUES(4, 'Mitsui', 20, 'Nagoya');

これでテーブルには4つのデータが追加されました。
SELECT文を使ってテーブルからデータを取得してみます。

SELECT * FROM testUSER;
実行結果
id          name        old         address   
----------  ----------  ----------  ----------
1           Yamada      19          Tokyo     
2           Mori        32          Kyoto     
3           Ueda        27          Tokyo     
4           Mitsui      20          Nagoya

特定のカラムだけに値を指定してデータを追加する

書式
INSERT INTO テーブル名(カラム1, カラム2, ...) VALUES(1, 2, ...);

新たにテーブルを作成します。

CREATE TABLE testUser2(id INTEGER, name TEXT, address TEXT DEFAULT 'NO VALUE');

テーブルには3つのカラムがあり、 address カラムにはデフォルト制約が設定されています。
まずは3つのカラムに全て値を指定してデータを追加します。

INSERT INTO testUser2(id, name, address) VALUES(1, 'Honda', 'Tokyo');

次に2つのカラムだけに値を指定してデータを追加してみます。
1つ目は、idカラムとnameカラムだけ、
2つ目は、idカラムとaddressカラムだけに値を指定してデータを追加します。

INSERT INTO testUser2(id, name) VALUES(2, 'Okada');
INSERT INTO testUser2(id, address) VALUES(3, 'Mori');

これでテーブルには先ほどのと合わせて3つのデータが追加されました。それでは SELECT 文を使ってテーブルからデータを取得してみます。

SELECT * FROM testUser2;
実行結果
id          name        address   
----------  ----------  ----------
1           Honda       Tokyo     
2           Okada       NO VALUE  
3                       Mori      

2つ目のデータを追加した時には、addressカラムの値を指定していなかったのですが、addressカラムにはデフォルト制約が設定されていたためデフォルト値である'no value'が格納されています。

3つ目のデータを追加した時には、nameカラムの値を指定していなかったので、デフォルト値であるNULLが格納されています(NULLは画面上では何も表示されません)。

このようにテーブルに含まれるカラムの中で一部のカラムだけに値を指定してデータを追加することができます。

尚、データを追加する時に記述するカラムの順番はテーブルで定義されているカラムの順番通りである必要はありません。
次の2つは同じ結果となりエラーにもなりません。

INSERT INTO user(id, name) VALUES(2, 'Ueda');
INSERT INTO user(name, id) VALUES('Ueda', 2);

値を指定せずにデータを追加する

値を1つも指定せずにデータを追加することもできます。この場合は全てのカラムにデフォルトの値が格納されます。

書式
INSERT INTO テーブル名 DEFAULT VALUES;

それでは実際に試してみます。テーブルは先ほどと同じtestUser2をそのまま利用します。

sql:.schema testUser2
CREATE TABLE testUser2(id INTEGER, name TEXT, address TEXT DEFAULT 'NO VALUE');

値を指定せずにデータを追加します。

INSERT INTO testUser2 DEFAULT VALUES;
SELECT * FROM testUser2;
実行結果
id          name        address   
----------  ----------  ----------
1           Honda       Tokyo     
2           Okada       NO VALUE  
3                       Mori      
                        NO VALUE  

追加されたデータは値が指定されていませんので、デフォルト制約が設定されていないidカラム、nameカラムにはデフォルト値のNULLが格納され、デフォルト制約が設定されているaddressカラムには設定されているデフォルト値が格納されました。

このように値を1つも指定せずにデータをテーブルに追加することが可能です。


本記事目次ページ

【データベース】SQLite3・JDBCまとめ

参考サイト

tsweblabo
はじめまして。t's Web Laboと申します。 昨年新しい環境での生活が始まり、多くの方のサポートのおかげでようやく環境が整ってきました。 とはいえ知識や技術面の足りない部分が多く、日々勉強の必要性を感じています。 プログラミング関連で興味を持ったこと、勉強したことを備忘録の意味も込めてQiitaで発信していきます。 2020.06.03
https://tsweblabo.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away