メインコンテンツにスキップ
モジュール 8 · レッスン 1 / 4コース内の 29/57~10 min
モジュールのレッスン (1/4)

データの挿入: INSERT

ここまではデータを読んできました。いくつか書く時が来ました。 INSERT は テーブルに新しい行を追加するコマンド。

基本的な構文

SQL
INSERT INTO tabella (col1, col2, …)
VALUES (val1, val2, …);

データセットの例:

SQL
INSERT INTO customers (first_name, last_name, email, city, country, signed_up_on)
VALUES ('Marco', 'Bianchi', 'marco.bianchi@example.com', 'Verona', 'Italia', '2025-07-15');

列に名前を付けることをお勧めします。これにより、クエリが作成されます。 将来のスキーマ変更に対して堅牢 (例: 新しいオプションの phone 列) 何も壊しません)そして自己文書化します。

複数行の INSERT

単一のステートメント、複数の行 - N 個の個別の INSERT よりもはるかに高速です。

SQL
INSERT INTO categories (name, parent_id) VALUES
  ('Gaming',         1),
  ('Smart Home',     1),
  ('Cucina vegana',  8);

戻る: 挿入したばかりの値を読み取ります

PostgreSQL の特徴的な句: RETURNING は、次の行を返します。 作成されたばかりです。自動生成された id を取得するのに非常に便利です。

SQL
INSERT INTO categories (name, parent_id)
VALUES ('Gaming', 1)
RETURNING id, name;

出力は、id (SERIAL によって割り当てられる) を含む 1 行のテーブルです。 name。

列が欠落している場合はどうなるか

INSERT で列を省略した場合:

  • NOT NULL DEFAULT なし の場合 → エラー。
  • DEFAULT (ID の SERIAL を含む) がある場合 → それが使用されます。
  • NULL を受け入れる場合 → NULL になります。
SQL
-- Va bene: id è SERIAL (auto), country ha NOT NULL ma forniamo tutti i campi
INSERT INTO customers (first_name, last_name, email, city, country, signed_up_on)
VALUES ('Olivia', 'Marini', 'olivia.marini@example.com', 'Bari', 'Italia', '2025-07-20');

-- Errore: first_name è NOT NULL e non è fornito
INSERT INTO customers (last_name, email, city, country, signed_up_on)
VALUES ('Marini', 'olivia.marini@example.com', 'Bari', 'Italia', '2025-07-20');

あなたの番です

運動#sql.m8.l1.e1
試行回数: 0読み込み中…

名「Marco」、姓「Bianchi」、電子メール「marco.bianchi@example.com」、都市「Verona」、国「Italia」、signed_up_on「2025-07-15」を持つ新しい顧客を顧客テーブルに挿入します。すべての列に明示的に名前を付けます。

エディターを読み込み中…
ヒントを表示

VALUES の値の順序は、名前を付けた列の順序と一致する必要があります。

3 回の試行後に解決策が利用可能になります

復習演習

運動#sql.m8.l1.e2
試行回数: 0読み込み中…

新しい「Gaming」カテゴリを「Elettronica」の子として挿入します (id = 1)。 RETURNING 句を使用して、新しく作成されたカテゴリの ID と名前を返します。

エディターを読み込み中…
ヒントを表示

RETURNING は、SELECT とまったく同じように、列のリスト (または '*') を受け入れます。

3 回の試行後に解決策が利用可能になります