コース一覧
SQL実践:JOIN・サブクエリ・データ更新
INSERT 文でデータを追加する

SQL実践:JOIN・サブクエリ・データ更新

JOIN、集合演算、サブクエリ、CTE、DDL・DMLを学び、複数テーブルを組み合わせてデータベースを作成・更新する無料コースです。

1
テーブル結合
01. なぜ結合が必要か5分
02. INNER JOINの基本5分
03. LEFT/RIGHT OUTER JOIN5分
04. 複数テーブルの結合5分
05. 自己結合5分
06. 集合演算 UNION/INTERSECT/EXCEPT5分
07. 結合の実践演習5分
08. テーブル結合クイズ5分
2
サブクエリ活用
01. サブクエリとは5分
02. WHERE句のサブクエリ5分
03. FROM句のサブクエリ5分
04. SELECT句のサブクエリ5分
05. WITH句(CTE)の活用5分
06. サブクエリ実践クイズ5分
3
テーブル作成とデータ操作
01. CREATE DATABASE と CREATE TABLE5分
02. データ型の選び方5分
03. INSERT 文でデータを追加する5分
04. UPDATE 文でデータを更新する5分
05. DELETE 文でデータを削除する5分
06. 物理削除と論理削除5分
07. ALTER TABLE で構造を変更する5分
08. 制約 (NOT NULL / UNIQUE / DEFAULT)5分
09. TRUNCATE と DROP5分
10. DDL / DML 実践クイズ5分

INSERT 文でデータを追加する

列と値の対応

列名を書かないと、列が増えた日に静かに壊れる

INSERT には 2 つの書き方があります。

SQL クエリ

-- 列名を省く書き方  テーブル定義の並び順にそのまま入る
INSERT INTO staff VALUES (1, '田中', '2026-04-01');

-- 列名を書く書き方
INSERT INTO staff (id, full_name, hired_on)
VALUES (1, '田中', '2026-04-01');

上の書き方は、後から誰かが列を 1 つ足した瞬間に、値が 1 つずつずれます。しかも、ずれた先の型がたまたま合っていると、エラーにならずに間違った行が入ります。エラーで止まってくれない不具合は、見つかるまでに何か月もかかります。本番のコードでは必ず列名を書きます。

3 行入れるのに、3 回往復しない

行を 3 つ入れたいとき、INSERT を 3 回書く必要はありません。VALUES の後ろにカンマで並べれば、1 文で何行でも入ります。

SQL クエリ

INSERT INTO staff (id, full_name, hired_on) VALUES
  (1, '田中', '2026-04-01'),
  (2, '佐藤', '2026-04-01'),
  (3, '鈴木', '2026-05-16');

1 行ずつ投げると、行の数だけデータベースとの往復が発生します。3 行なら誤差ですが、初期データを数千行入れるときには、待ち時間がはっきり変わります。

書かなかった列には、DEFAULT が入る

列名を書く方式では、一部の列を省けます。省いた列には DEFAULT で決めた値が入り、DEFAULT が無ければ NULL が入ります。

SQL クエリ

CREATE TABLE messages (
  id      INT PRIMARY KEY,
  body    TEXT NOT NULL,
  is_read INT NOT NULL DEFAULT 0
);

-- is_read を省いても、0 が入る
INSERT INTO messages (id, body) VALUES (1, 'はじめまして');

ここで body を省くと、NOT NULL に反するのでエラーになり、行は 1 つも入りません。「制約に反する行は最初から入れない」というのが INSERT の性格です。テーブルを作るときに制約を丁寧に付けておくと、アプリ側のうっかりでおかしなデータが混ざるのを、データベースが手前で止めてくれます。

解説

現場の話 文字列は必ずシングルクォートで囲みます。逆に、数値の列に '120000' と引用符付きで渡しても、多くのデータベースは黙って変換して通します。動いてしまうぶん気付きにくく、レビューでは指摘される書き方です。

テーブル構造

CREATE TABLE products (
  id INT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  price INT NOT NULL,
  stock INT NOT NULL DEFAULT 0
);

期待される出力

idnamepricestock
2ワイヤレスマウス350050
3外付けSSD 1TB1480020
1ノートPC12000010

ヒント

1 つの INSERT 文の VALUES に (a, b, c), (d, e, f) のようにカンマで並べる

列名はテーブル定義と同じ順で書くと事故が少ない

確認用 SELECT は変更不要

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • データベースデータを構造化して保存する仕組み
  • テーブルDB の表 (Excel のシートみたいなもの)
  • レビューコードを読み合い品質を上げる工程
  • ビュークエリに名前をつけて再利用する仮想表
query.sql
学習モード
エディタを読み込んでいます
コードの実行結果
データベースを初期化中...