コマンド道場
INSERT難易度 ★★☆☆☆

新入社員を登録する

次の社員を 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_idbusho_nameparent_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_idnamebusho_idjoushi_idsalaryhired_ontaishoku_on
1鈴木1NULL9800002014-04-01NULL
2佐藤217200002016-10-01NULL
3田中225200002019-04-01NULL
4中村225300002020-04-01NULL
5小林224450502024-04-01NULL

解説

結論

INSERT INTO 表名 (列名, ...) VALUES (値, ...) です。列名は省略せずに書きます。

★列名を省略しない理由

省略すると、値は表の定義順に割り当てられます。あとから列が追加・並べ替えされたとき、SQL は構文としては正しいまま、別の列に値が入るようになります。エラーが出ないので、データが壊れてから気づくことになります。列名を書いておけば、定義が変わっても意図どおりに動くか、はっきりエラーになります。

★NULL と空文字は別物です: 「値が無い」を表すのは NULL です。'' は「長さ 0 の文字列という値」であって、値が無いわけではありません。日付列に '' を入れようとすれば型が合わずエラーになりますが、文字列列では通ってしまい、あとから IS NULL で探しても見つからない、という状態になります。

★値の位置に副問い合わせを書けます: 部署番号のような「別の表を見ないと分からない値」は、番号を人が調べて書き写すより、副問い合わせで求める方が安全です。ただし副問い合わせは 1 つの値を返す必要があります。

⚠️ 制約は登録時に効きます: この表には主キー(重複できない)、外部キー(存在しない部署や上司を指定できない)、CHECK(給与は正の数)が定義されています。制約に引っかかると行は登録されません。エラーメッセージには、どの制約に違反したかが書かれています。

よくある間違い

①列名を省略して値の順序を間違える。②NULL を入れるべきところに空文字や 0 を入れる。③指示にない行まで登録する。

根拠(一次情報)