PREPARATION
受験対策

Silverの例題解説
「S3.1 SQLコマンド(UPDATE文)」

「S3 開発/SQL - S3.1 SQLコマンド(UPDATE文)」からの出題です。

例題

次のようなテーブルを作成し、それぞれに行を作成した。

create table dept(id integer, name varchar);
create table emp(id integer, name varchar, dept_id integer, dept_name text);

ここで、dept表のname列をemp表のdept_name列にコピーするため、次のSQLを実行する。

update emp set dept_name = (select name from dept where id = emp.dept_id);

最も適切な説明を1つ選びなさい。


  1. dept表のid列に主キー(PRIMARY KEY)または一意キー(UNIQUE)制約が必要である。
  2. emp表のdept_id列に主キー(PRIMARY KEY)または一意キー(UNIQUE)制約が必要である。
  3. dept表のid列に重複がある場合、エラーが発生するかもしれない。
  4. dept表のid列に重複がある場合、updateの結果は予測できない。
  5. 構文エラーで実行できない。

※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2023年4月26日

解答と解説

UPDATE文の最も基本的な形式は
UPDATE テーブル名 SET 列名=値 WHERE 条件
ですが、この「値」の部分にカッコで括ったSELECT文を置くことで、他のテーブルを参照した更新を行うことができます。

このとき、SELECT文が複数の行を返してはいけない(エラーになる)ということに注意する必要があります。例えばdept表が以下のようになっているとして、emp表にdept_idが2の行があったとすると、ERROR:  more than one row returned by a subquery used as an expression というエラーが発生します。

=> select * from dept;
id |      name
----+----------------
  1 | マリナーズ
  2 | ヤンキース
  2 | レッドソックス
(3 行)

もちろん、dept表のid列に一意制約があればこのようなことは発生しませんが、制約があることは必須ではなく、また重複があったとして、emp表にdept_id=2の行がなければ、SQLは成功します。なお、このようなテーブル構造の場合、外部キー(FOREIGN KEY)制約で、emp表のdept_id列からdept表のid列を参照させるのがよくある方法ですが、外部キー制約を使う場合は、参照される側、つまりdept表のid列に主キーまたは一意制約が必要です。

emp表のdept_idに一意制約があっても、このUPDATEの実行には関係ありませんが、現実的には、他のテーブルを参照する列に一意制約を付けることはないでしょうね。

なお、PostgreSQLの独自拡張で、UPDATEにFROM句を付けてテーブルの結合をすることができます。例題のUPDATE文とほぼ同等のことを

update emp set dept_name = dept.name from dept where emp.dept_id = dept.id

のように記述することもできますが、この場合、上のようにdept表にid=2の行が複数あってもエラーにならず、emp表のdept_id=2の行の更新結果は予測できないことに注意が必要です。

従って正解はCです。

今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。

※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システム、AIなどの
新領域での「PostgreSQL」の採用が拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定です

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。