【SQL】INSERT:データの登録とNOT NULL
CREATE TABLE文でテーブルを作成したあと、INSERT文でデータを挿入する
/* まずテーブルを作成する
(商品テーブル insert学習用) */
CREATE TABLE ShohinIns
(
shohin_id CHAR(4) NOT NULL,
shohin_mei VARCHAR(100) NOT NULL,
shohin_bunrui VARCHAR(32) NOT NULL,
hanbai_tanka INTEGER DEFAULT 0,
shiire_tanka INTEGER,
torokubi DATE,
PRIMARY KEY(shohin_id)
);
INSERT INTO ShohinIns
(
/* 列リスト */
shohin_id, shohin_mei, shohin_bunrui, hanbai_tanka, shiire_tanka, torokubi
) VALUES (
/* 値リスト */
'0001', 'Tシャツ', '衣服', 1000, 500, '2009-09-20'
);
/* 実行結果 */
shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
-----------+------------+---------------+--------------+--------------+------------
0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
- 文字列型、日付型:シングルクォーテーションで囲む
- 列名のリストと値のリストは、列数を一致させて書く
- 原則、
INSERT文は1回の実行で1行を挿入する
(複数行を挿入するときは行数だけ繰り返す)
列リストの省略
テーブルの全列に対してINSERTを行う場合、列リストを省略できる
/* 列リストあり */
INSERT INTO ShohinIns
(
shohin_id, shohin_mei, shohin_bunrui, hanbai_tanka, shiire_tanka, torokubi
) VALUES (
'0005', '圧力鍋', 'キッチン用品', 6800, 5000, '2009-01-15'
);
/* 列リスト省略 */
INSERT INTO ShohinIns VALUES (
'0005', '圧力鍋', 'キッチン用品', 6800, 5000, '2009-01-15'
);
NULLを挿入する
INSERT文である列にNULLを割り当てたいとき、値リストにNULLをそのまま記述する
/* shiire_tankaにNULLを割り当てる */
INSERT INTO ShohinIns
(
shohin_id, shohin_mei, shohin_bunrui, hanbai_tanka, shiire_tanka, torokubi
) VALUES (
'0006', 'フォーク', 'キッチン用品', 500, NULL, '2009-09-20'
);
【注意】
NULLを割り当てられる列は「NOT NULL制約のついていない列」のみNOT NULL制約のついている列にNULLを割り当てた場合はエラーとなる
/* NOT NULL制約のついている
「shohin_bunrui」にNULLを割り当てる */
INSERT INTO ShohinIns
(
shohin_id, shohin_mei, shohin_bunrui, hanbai_tanka, shiire_tanka, torokubi
) VALUES (
'0006', 'フォーク', NULL, 500, 400, '2009-09-20'
);
/* エラーが出る */
ERROR: null value in column "shohin_bunrui" of relation "shohinins" violates not-null constraint
複数行を挿入する
1回で複数行を挿入することも可能(multi row insert)
/* 3行を挿入する */
INSERT INTO ShohinIns VALUES
('0002', '穴あけパンチ', '事務用品', 500, 320, '2009-09-20'),
('0003', 'カッターシャツ', '衣服', 4000, 2800, NULL),
('0004', '包丁', 'キッチン用品', 3000, 2800, '2009-09-20');
shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
-----------+----------------+---------------+--------------+--------------+------------
0001 | Tシャツ | 衣服 | 1000 | 500 | 2009-09-20
0002 | 穴あけパンチ | 事務用品 | 500 | 320 | 2009-09-20
0003 | カッターシャツ | 衣服 | 4000 | 2800 |
0004 | 包丁 | キッチン用品 | 3000 | 2800 | 2009-09-20
【注意】
- エラーが出たとき、どの行のどこの箇所がエラーなのか特定しにくい
- 上記の構文が使用できないRDBMSがある
◯:DB2、SQL Server、PostgreSQL、MySQL
✗:Oracle
INSERTのまとめ:この記事/デフォルト値/他のテーブルからコピーする
参考書籍:ミック『SQL 第2版 ゼロからはじめるデータベース操作』(翔泳社)