OFFSET ROWS、FETCH NEXT ROWS、WITH TIES
問3
次のSQL文を実行しました。
SELECT last_name,salary FROM employees ORDER BY salary DESC OFFSET 3 ROWS FETCH NEXT 4 ROWS WITH TIES;
実行結果について正しい記述はどれですか? 最適なものを選択しなさい。
- a. エラーになる
- b. 給与が大きい順の5番目から7番目の3件が表示される(7番目と同額の行が複数存在する場合、最初の1件目が表示される)
- c. 給与が大きい順の4番目から7番目の行が表示される(7番目と同額の行が複数存在する場合、最初の3件が表示される)
- d. 給与が大きい順の4番目から7番目の行が表示される(7番目と同額の行が複数存在する場合、すべてが表示される)
本講座の第2回において、「FETCH FIRSTを使用して戻される行の数または割合を制限する」方法を説明しました。そのときには、ROWS ONLYとWITH TIESだけを説明して、OFFSETは各自で勉強しておいてくださいねと言い残しました。本設問はOFFSETとWITH TIESの組み合わせです。
WITH TIESは、行制限している最後の行と同じ値が連続して存在する場合、その行を表示するのでした。したがって、OFFSETを覚えていなくても、選択肢のカッコ内の説明で正解できたかもしれませんね。ちなみに、OFFSETは行制限をする前にスキップする行の数を指定します。
設問ではOFFSET 3 ROWSですから、3行スキップして4番目の行から表示されます。続いてFETCH NEXT 4 ROWSですから、表示件数は4件つまり7番目の行までが表示されます。さらにWITH TIESが最後についているので、7番目の行と同額が複数存在する場合、すべて表示されます。したがって、選択肢dは正解です(以下は選択肢dでの実行例)。
SQL> SELECT last_name,salary FROM employees 2 ORDER BY salary DESC; LAST_NAME SALARY --------------- ---------- King 24000 Kochhar 17000 De Haan 17000 Russell 14000 Partners 13500 Hartstein 13000 Higgins 12008 Greenberg 12008 Errazuriz 12000 Ozer 11500 (以下省略) 108行が選択されました。 SQL> SELECT last_name,salary FROM employees 2 ORDER BY salary DESC OFFSET 3 ROWS FETCH NEXT 4 ROWS WITH TIES; LAST_NAME SALARY --------------- ---------- Russell 14000 Partners 13500 Hartstein 13000 Greenberg 12008 Higgins 12008
この記事は参考になりましたか?
- めざせオラクルマスターホルダー! Oracle DB 12c SQL基礎 弱点克服スクール連載記事一覧
-
- 12c SQL基礎の総復習「模擬問題」
- リレーショナルデータベースの概要~正規化とER図
- データ定義言語(DDL)の概要
- この記事の著者
-
林 優子(ハヤシ ユウコ)
日本オラクル株式会社の教育ビジネスのスタートアップを全面的に支援し、バージョン5の頃からOracleに携わるベテラン講師として知る人も多い。Oracle認定講師を表彰するExcellent Instructorを連続受賞。1ランク上のITスペシャリスト育成を目標に、データベース分野にとどまらず「プレゼンテーション」、「ロジカルシンキング」などのトレーニングも手がけている。著書に『オラクルマスター教科書』シリーズ(翔泳社)、『プロとしてのデータモデリング入門』(SBクリエイティブ)など。その他、雑誌執筆、著書・メディア出演も多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

