PREPARATION
受験対策

Silverの例題解説「開発/SQL - SELECT文」

今回は、Silverの「開発/SQL - SELECT文」からの出題です。

例題

3.22

以下のような表がある。
=> SELECT * FROM table1;

id | val1 | val2
---- + ------ + ------
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
5 | 2 | 3
6 | 3 | 3
7 | 4 | 1
8 | 4 | 5
(8 行)
なお、id、val1、val2 いずれもINTEGER型である。

次のSQL文を実行した時に返されるidの値は何か?

SELECT id FROM table1
ORDER BY val2 DESC, val1
LIMIT 1 OFFSET 3;

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

解答と解説

一般にSELECT文は行を返す時の順番を保証しませんが、ORDER BY句をつけることで、そこで指定した列の値でソートして表示することになります。
列名だけ指定、あるいは列名の後にASCと指定すれば昇順、列名の後でDESCと指定すると降順になります。
例題のSELECT文ではval2の値で降順でソートし、val2の値が同じ行についてはval1の値で昇順にソートします。val1もval2も同じ場合は(例題では該当するケースがありませんが)、それらがどういう順序で表示されるかは不定となります。
PostgreSQLではSELECT文で返される行の一部だけを表示するため、LIMIT句、OFFSET句を使うことができます。LIMITで指定した行数だけを表示するので、例題の場合は1行だけ表示します。OFFSETがなければ先頭の1行を表示しますが、OFFSET句があると、そこで指定した行数をスキップして、次の行を表示します。
つまり、例題の場合は、ソートした後、3行をスキップしますから、4行目のデータを表示することになります。
まず、val2の値で降順にソートすると、先頭はval2=5の行(id=8)、続いてval2=3の行が3行(id=3, 5, 6)ということになります。val2=3の行をval1で照準にソートして3番目になる、つまり全体で4番目になるのはval1=3の行、すなわちid=6の行です。

従って正解は 6 です。

 

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

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

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

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

LPI-Japan
Platinum Sponsors