SQLの基本であるINSERTの説明は多くのサイトで書かれているが、MySQLでは2つの書き方ができる点や、複数行の挿入ができる点、SELECTの結果を挿入できる点などにも触れているサイトは少ない。
基本的な挿入方法
まずは、よく見る基本的な挿入の方法。
INSERT INTO <テーブル名> (<カラム名1>, <カラム名2>, ...) VALUES(<データ1>, <データ2>, ...);
INSERT INTO sample (id, name) VALUES(1, '太郎');
INSERT INTO sample (id, title, content) VALUES(2, 'レコードを挿入する', 'SQLの基本で・・・・');
INSERT acc (url, referer) VALUES('http://xxxxxxxxx/', 'http://yyyyyyyyyyyyyyy/');
MySQLではINTOが省略できるが、PostgreSQLではできないので、互換性を考えて省略しない方が良い。
テーブルの持つ全てのカラムに順番通りにデータを挿入するのなら、カラム名リストを省略して、以下のように書くこともできる。
INSERT INTO <テーブル名> VALUES(<データ1>, <データ2>, ...);
INSERT INTO sample VALUES(1, '太郎');
INSERT INTO sample VALUES(2, 'レコードを挿入する', 'SQLの基本で・・・・');
INSERT acc VALUES('http://xxxxxxxxx/', 'http://yyyyyyyyyyyyyyy/');
カラム名リストを省略した場合は、カラムを追加したときにSQLを書き換える必要があることに注意。
デフォルト値を挿入したい場合には以下のようにDEFAULTと書くことでデフォルト値を与えることができる。
INSERT INTO sample VALUES(DEFAULT, '太郎'); INSERT INTO test VALUES(DEFAULT, 'レコードを挿入する', DEFAULT);
複数レコードの挿入方法
以下のように書くことで複数のレコードを同時に挿入できる。
INSERT INTO <テーブル名> (<カラム名1>, <カラム名2>, ...) VALUES(<データ1-1>, <データ1-2>, ...), (<データ2-1>, <データ2-2>, ...), ...;
INSERT INTO sample (id, name) VALUES(1, '太郎'), (2, '次郎'), (3, '三郎'); INSERT sample VALUES(4, '四郎'), (5, '五郎'), (6, '六郎');
複数の場合でも同様にINTOやカラム名リストは省略できる。
UPDATE文のように書く挿入方法
方法1のような書き方以外に、UPDATE文のような書き方をすることもできる。
INSERT <テーブル名> SET <カラム名1> = <データ1>, <カラム名2> = <データ2>, ....;
INSERT test SET user = 'トム', score = 82; INSERT book SET id = 21983, title = '売れない本のススメ', price = 2500;
この書き方では、同時に複数のレコードを挿入することはできない。 また、PostgreSQLではこのような書き方ができないため、互換性を考えてこの書き方はあまりしない方が良い。
SELECTの結果を挿入する方法
別のテーブルからデータを挿入したいという場合には、以下のように書くことで別のテーブルから挿入できる。
INSERT INTO <テーブル名> (<カラム名1>, <カラム名2>, ...) <SELECT文>
INSERT INTO sample (id, name) SELECT test.id, test.user FROM test; INSERT INTO sample (name) SELECT book.title FROM book WHERE price > 2000; INSERT referer SELECT acc.referer FROM acc WHERE time > '2007/12/01';
この場合でも、同じようにINTOやカラム名リストを省略することができる。