今回は、Silverの「開発/SQL - SQLコマンド(UPDATE文)」からの出題です。
※この例題は実際の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事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.