新入社員を登録する
次の社員を shain テーブルに登録してください。社員番号 19、名前「森」、所属は開発部、上司は佐藤(社員番号 2)、給与 430000、入社日 2026-08-01、在籍中(退職日は無し)。所属部署の番号は busho テーブルから調べて指定してください。
この書き方が使えない製品があります そのまま使える: PostgreSQL / MySQL / MariaDB / SQLite / SQL Server / Oracle Database
未確認: IBM Db2
- 列名を並べてから値を並べる書き方を勧めます。省略すると表の定義順に依存し、あとから列が増えたときに壊れます。
- VALUES にカンマで複数行を並べれば、一度にまとめて入れられます。
この問題で使えるテーブル(名前をタップすると入力できます)
7 行
| 列 | 型 | NULL |
|---|---|---|
| 🔑 | int | 不可 |
| text | 不可 | |
| int | 可 |
データを見る(先頭 5 行)
| busho_id | busho_name | parent_busho_id |
|---|---|---|
| 1 | 経営 | NULL |
| 2 | 開発 | 1 |
| 3 | 営業 | 1 |
| 4 | 管理 | 1 |
| 5 | 基盤 | 2 |
18 行
| 列 | 型 | NULL |
|---|---|---|
| 🔑 | int | 不可 |
| text | 不可 | |
| int | 可 | |
| int | 可 | |
| numeric(10,0) | 不可 | |
| date | 不可 | |
| date | 可 |
データを見る(先頭 5 行)
| shain_id | name | busho_id | joushi_id | salary | hired_on | taishoku_on |
|---|---|---|---|---|---|---|
| 1 | 鈴木 | 1 | NULL | 980000 | 2014-04-01 | NULL |
| 2 | 佐藤 | 2 | 1 | 720000 | 2016-10-01 | NULL |
| 3 | 田中 | 2 | 2 | 520000 | 2019-04-01 | NULL |
| 4 | 中村 | 2 | 2 | 530000 | 2020-04-01 | NULL |
| 5 | 小林 | 2 | 2 | 445050 | 2024-04-01 | NULL |
解説
結論
INSERT INTO 表名 (列名, ...) VALUES (値, ...) です。列名は省略せずに書きます。
★列名を省略しない理由
省略すると、値は表の定義順に割り当てられます。あとから列が追加・並べ替えされたとき、SQL は構文としては正しいまま、別の列に値が入るようになります。エラーが出ないので、データが壊れてから気づくことになります。列名を書いておけば、定義が変わっても意図どおりに動くか、はっきりエラーになります。
★NULL と空文字は別物です: 「値が無い」を表すのは NULL です。'' は「長さ 0 の文字列という値」であって、値が無いわけではありません。日付列に '' を入れようとすれば型が合わずエラーになりますが、文字列列では通ってしまい、あとから IS NULL で探しても見つからない、という状態になります。
★値の位置に副問い合わせを書けます: 部署番号のような「別の表を見ないと分からない値」は、番号を人が調べて書き写すより、副問い合わせで求める方が安全です。ただし副問い合わせは 1 つの値を返す必要があります。
⚠️ 制約は登録時に効きます: この表には主キー(重複できない)、外部キー(存在しない部署や上司を指定できない)、CHECK(給与は正の数)が定義されています。制約に引っかかると行は登録されません。エラーメッセージには、どの制約に違反したかが書かれています。
よくある間違い
①列名を省略して値の順序を間違える。②NULL を入れるべきところに空文字や 0 を入れる。③指示にない行まで登録する。
根拠(一次情報)
- PostgreSQL 18 マニュアル: INSERT一次情報・確認 2026-07-28
- PostgreSQL 18 マニュアル: 制約一次情報・確認 2026-07-28