開発部の社員を 5% 昇給させる
開発部(busho_name が「開発」)に所属する社員の給与を 5% 引き上げてください。下位部署である基盤部の社員や、他の部署の社員の給与は変更しないでください。
主要 7 製品で通用 そのまま使える: PostgreSQL / MySQL / MariaDB / SQLite / SQL Server / Oracle Database / IBM Db2
- UPDATE も WHERE を書き忘れると全行が変わります。先に同じ条件で SELECT して確かめてください。
- 他の表の値を使って更新するときは、副問い合わせで書けばそのまま持ち運べます。UPDATE ... FROM(PostgreSQL・SQL Server)や UPDATE ... JOIN(MySQL)は製品ごとに書き方が違います。
この問題で使えるテーブル(名前をタップすると入力できます)
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 |
解説
結論
UPDATE の WHERE で対象を絞ります。副問い合わせで部署名から busho_id を引けば、ID をハードコードせずに済みます。
★端数はどうなるか(このデータで確かめられること): salary 列は numeric(10,0)、つまり小数点以下の桁を持たない型です。PostgreSQL は値をこの型に格納するときに自動で四捨五入します。小林の給与 445050 を 5% 増やすと 467302.5 ですが、格納された値は 467303 になります。したがって round() を明示的に書いても書かなくても結果は同じです。⚠️ これは列の型が numeric(10,0) だから成り立つ話です。numeric(10,2) や double precision の列なら端数が残るので、意図した丸めを保証したいなら round() を明示するのが安全です。
よくある間違い
①WHERE を書き忘れて全社員を昇給させてしまう。UPDATE / DELETE は WHERE の確認を習慣にしましょう。②このデータでは開発部の下に基盤部があります。parent_busho_id をたどって下位部署まで含めてしまうと、設問の指示(基盤部は変更しない)に反します。階層をたどる書き方は再帰 CTE のトピックで扱います。
根拠(一次情報)
- PostgreSQL 18 マニュアル: UPDATE一次情報・確認 2026-07-25
- PostgreSQL 18 マニュアル: 数学関数と演算子(round)一次情報・確認 2026-07-25
- PostgreSQL 18 マニュアル: 数値データ型(numeric の丸め)一次情報・確認 2026-07-26