目次
INSERT文 (列名を書く構文)[推奨]
サンプル
INSERT INTO employee(id,name,romaji) VALUES (1,'鈴木','suzuki');
INSERT INTO employee(id,name,romaji) VALUES (2,'田中',null);
INSERT INTO employee(id,name) VALUES (3,'佐藤');
解説
INSERT INTO テーブル名 ( テーブルの列名1 [ , テーブルの列名2 ]・・・) VALUES ( ‘値1′ [ , ‘値2’ ]・・・); |
- テーブル名の後にテーブルの列名を書くINSERT文です。
- 全てのテーブルの列名を記述する必要はありません。(重要)
- テーブルの列名の位置に対応してvaluesの値を指定します。
- テーブルの列の数が増える、またはinsert文で使用していないテーブルの列が削除されてもエラーは発生しません。(推奨の理由)
使用例
以下のテーブルにデータを追加します。
id int |
name varchar |
romaji varchar |
---|---|---|
以下のSQLを実行します。
INSERT INTO employee(id,name,romaji) VALUES (1,'鈴木','suzuki');
INSERT INTO employee(id,name,romaji) VALUES (2,'田中',null);
INSERT INTO employee(id,name) VALUES (3,'佐藤');
1,2,3行目ともemployeeの後にテーブルの列名があります。
3行目は、employeeの後のテーブルの列名とVALUESの後の値が2つのみです。
実行結果は、以下のとおりです。
id int |
name varchar |
romaji varchar |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | null |
3 | 佐藤 | null |
テーブルの3行目の項目「romaji」の値はnullになっています。
INSERT文 (列名を書かない構文)
サンプル
INSERT INTO employee VALUES (1,'鈴木','suzuki');
INSERT INTO employee VALUES (2,'田中',null);
解説
INSERT INTO テーブル名 VALUES ( ‘値1′ [ , ‘値2’ ]・・・); |
- テーブル名とvaluesの間に、テーブルの列名を書かないINSERT文です。
- valuesの後にINSERTする値を記述します。
→値は、テーブルの列の数と同じ数を記述します。(重要)
→値の位置がテーブルの列の位置に対応します。(重要) - 値をセットしない項目はNULLと書きます。
- テーブルの列の数に増減があった場合、SQLも修正しないとエラーが発生します。(非推奨の理由)
使用例
以下のテーブルにデータを登録します。
id int |
name varchar |
romaji varchar |
---|---|---|
以下のSQLを実行します。
INSERT INTO employee VALUES (1,'鈴木','suzuki');
INSERT INTO employee VALUES (2,'田中',null);
1,2行目ともemployeeとVALUESの間にテーブルの列名がありません。
2行目は、VALUESの3つめの値がnullになっています。
実行結果は、以下のとおりです。
id int |
name varchar |
romaji varchar |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | null |
select文の結果をinsertする(insert ~ select)
INSERT INTO employee1
SELECT * FROM employee2
INSERT INTO テーブル名 SELECT 項目名 FROM テーブル名 |
- select文の結果をテーブルに挿入するINSERT文です。
- selectして複数行取得した場合は、複数行がinsertされます。
サンプル
以下、2つのテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | null |
3 | 佐藤 | null |
2つめのテーブルにはデータはありません。
id | name | romaji |
---|---|---|
SQL文
上記のemployee2テーブルでselectしてemployee1テーブルにinsertします。
INSERT INTO employee1
SELECT * FROM employee2
2行目でselectした結果(3行のデータ)を1行目のテーブルにinsertしています。
結果
実行結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | null |
3 | 佐藤 | null |
employee2テーブルからemployee1テーブルにデータがinsertされました。
insert ~ selectで列を指定する
INSERT INTO employee1 (
id,
'test1'
)
SELECT
id,
name
FROM employee2
select文で指定した列名とinsert文の列名を対応させます。
3行目のように固定文字列を指定することもできます。
列を指定してinsertするサンプルです。
サンプル
以下、2つのテーブルがあるとします。
1つめのemployee2テーブルです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
2つめのemployee1テーブルです。
データはありません。
id | name | romaji |
---|---|---|
SQL文
上記のemployee2テーブルで列を指定してselectし、employee1テーブルにinsertします。
INSERT INTO employee1 (
id,
name
)
SELECT
id,
name
FROM employee2
select文で指定した列名とinsert文の列名を対応させます。
結果
実行結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | null |
2 | 田中 | null |
3 | 佐藤 | null |
employee2テーブルからemployee1テーブルに指定した列のデータがinsertされました。
selectとinsertで指定していない列はnullになります。
固定文字列を指定
以下の3行目のように固定文字列を指定することもできます。
その場合employee1テーブルのname列には固定文字のtest1が設定されます。
INSERT INTO employee1 (
id,
'test1'
)
SELECT
id,
name
FROM employee2
以下は、MySQLのinsert構文のリンクです。
https://dev.mysql.com/doc/refman/5.6/ja/insert.html
関連の記事
SQL UPDATE文でテーブルの行を更新するサンプル
SQL distinct 重複行を表示しないサンプル
SQL 複数の行をまとめる(集約関数/group by/having)
SQL INNER JOIN 内部結合のサンプル
SQL LEFT JOIN 外部結合のサンプル
SQL 副問合せのサンプル(サブクエリ)
SQL 自己結合のサンプル
SQL UNIONとUNION ALLのサンプル(結合して抽出)