HOME > 受験対策 > サンプル問題/例題解説 > Silverの例題解説「開発/SQL」 > SQLコマンド(UPDATE文)

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

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

例題

Q. 以下の一連の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技術者認定試験とは異なります。

解答と解説

順序を追って、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事務局ではお応えできませんのでご了解ください。

ページトップへ