PREPARATION
受験対策

Silverの例題解説「開発/SQL - SQLコマンド(UPDATE文)」

今回は、Silverの「開発/SQL - SQLコマンド(UPDATE文)」からの出題です。

例題

3.76

以下の一連のSQL文でテーブルを作成し、データを挿入、更新した。

create table sample (id integer, vali integer, vals text);
insert into sample (id, vali, vals) values (1, null, 'a'), (2, 2, 'b'), (3, 3, 'c'), (4, 4, 'd'), (5, 5, null);
update sample set vali = vali -1;
update sample set vals = 'x' where vali <= 2;
update sample set vali = 10 where vals <> 'x';
select sum(vali) from sample;

最後のSELECT文が返す値は何か。

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

解答と解説

順序を追って、sampleテーブル内の行がどうなっているか考えてみましょう。

insertの直後は、idが1~5の各行のvaliはそれぞれ、null, 2, 3, 4, 5で、valsは'a', 'b', 'c', 'd', nullとなっています。

最初のupdateはすべての行についてvali の値を vali - 1に変更しますが、valiの値がnullの場合は、引き算をした結果もnullになります。従って、idが1~5の各行のvaliはそれぞれ、null, 1, 2, 3, 4となります。

次のupdateはvaliが2以下の行についてvalsの値を'x'に変更しますが、valiがnullの場合は大小比較の結果が真にならないので、updateの対象にはなりません。従って、idが1~5の各行のvalsはそれぞれ、'a', 'x', 'x', 'd', nullとなります。

最後のupdateはvalsの値が'x'でない行についてvaliの値を10に変更します。ここで注意すべきはvalsがnullの場合、この比較結果が真にならず、updateの対象とならない、ということです。従って、idが1~5の各行のvaliはそれぞれ10, 1, 2, 10, 4となります。

最後のSELECT分はvaliの合計値を求めているので、正解は27です。

実際にpsqlから各SQL文を実行し、そのとき各UPDATEの後、select * from sample order by id; として、テーブルの内容がどのように変化しているのか、確認してみましょう。

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

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

企業の基幹システムや業務システムでの
OSS-DBの採用がますます拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定資格になります

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

LPI-Japan
Platinum Sponsors