<< 6/11 CLUB DB2 「初心者向けDB2チューニング入門」のWEB中継申し込み開始 | main | AIXにDB2を導入する際の情報が更新 >>

DB2にMySQL/PostgreSQL互換のLIMIT/OFFSET句が追加

以下のAntonioさんのblogで知ったのですが、先日リリースされたDB2 9.7 Fix Pack 2に面白い新機能が追加されていました。

- IBM releases DB2 Express-C 9.7.2
Support for the MySQL syntax for LIMIT and OFFSET. This greatly simplifies the process of getting existing applications to work with DB2.

マニュアルにもまだ記載が無いと思うのですが、DB2 9.7 FP2にはMySQLやPostgreSQLのSELECT文で使用可能なLIMIT/OFFSET句が使えるようになっていました。

LIMITとOFFSETは、アンサーセットから中間の行を切り取って返す機能です。SQL標準では無いのですが、検索エンジンの結果表示のような、大量にある情報から1ページ分だけ(最初の10件とか)表示する場合などに良く使われています。

これまではDB2で使えなかったので、同じことを実現するにはROWNUMを使用するなど別の方法で実行する必要がありました。以下はこのblogのずいぶん初期に書いたものですが、いまだにアクセスが多いエントリです。それだけニーズがあるということなのでしょうね。

- DB2でMYSQLのLIMITを実現するには | Unofficial DB2 BLOG

前置きが長くなりましたが、DB2 9.7 FP2からはLIMIT/OFFSETが使用できます。この機能を使うには、まず以下のようにDB2_COMPATIBILITY_VECTORに新しい定数"MYS"を設定する必要があるようです。最初これが分からず、結局Antonioさんに直接教えてもらって解決しました。

db2set DB2_COMPATIBILITY_VECTOR=MYS
db2stop
db2start

使い方はMySQLと同じです。

(参考)
- MySQL :: MySQL 5.5 Reference Manual :: 12.2.9 SELECT Syntax

たとえば、SELECT文の末尾にLIMIT xと書くと、アンサーセットがx行分だけ返りますし、LIMIT y,zと書くとアンサーセットのy+1行目のデータからz行分だけ返します。SAMPLEデータベースだとID列が10づつの連番になっているSTAFF表で試すのが分かりやすいですね。

例)
c:¥>db2 "SELECT * FROM STAFF LIMIT 2,4"

ID NAME DEPT JOB YEARS SALARY COMM
------ --------- ------ ----- ------ --------- ---------
30 Marenghi 38 Mgr 5 77506.75 -
40 O'Brien 38 Sales 6 78006.00 846.55
50 Hanes 15 Mgr 10 80659.80 -
60 Quigley 38 Sales - 66808.30 650.25

4 レコードが選択されました。

上のように、3行目から4行のアンサーセットが返っています。PostgreSQLのようにLIMIT a OFFSET bという書き方もサポートしています。この場合はb+1行目からa行分だけ返します。

c:¥>db2 "SELECT * FROM STAFF LIMIT 4 OFFSET 2"

ID NAME DEPT JOB YEARS SALARY COMM
------ --------- ------ ----- ------ --------- ---------
30 Marenghi 38 Mgr 5 77506.75 -
40 O'Brien 38 Sales 6 78006.00 846.55
50 Hanes 15 Mgr 10 80659.80 -
60 Quigley 38 Sales - 66808.30 650.25

4 レコードが選択されました。

MySQL/PostgreSQLユーザにDB2を使いやすくする良い改善点だと思います。無料のDB2 Express-Cもv9.7 FP2にアップデートされましたので、ぜひお試しあれ。

(参考)
- DB2 9.7 Fix Pack 2リリース。新機能多数。セキュリティ脆弱性の修正を含む | Unofficial DB2 BLOG
- 無料のDB2 Express-CがV9.7 Fix Pack 2に更新 | Unofficial DB2 BLOG

コメント
おおお、これはなかなか個人的には衝撃ですね。
やはり、ほとんどの画面系システムで
ページング検索ってありますから、
ニーズはとても高いかと思います。
今は、こういう風に書かないといけませんからね。
http://dbflute.sandbox.seasar.org/ja/manual/reference/dbway/db2/index.html#outsidesqlpaging

ただ、COMPATIBILITYじゃなくて、そのまま
メイン仕様になってくれてもいいような、
って気持ちもあります。
(なんでそうしないんだろう?って)
jfluteさん、コメントありがとうございます。

基本仕様にならないのは、基本的には互換性の維持のためです。エラーになるはずだったSQLが通るようになるのも非互換性ですので。特にこういうFix Packでの新機能追加は慎重に行われる傾向があるようです。次のメジャーバージョンアップでは仕様になっているかもしれませんね。

とはいえ、このような「スイッチをONにしないと使えない機能」は、フレームワークやライブラリの作者からすると面倒ですよね。
フレームワークの中でスイッチのON/OFFを判断できないと新機能が使えないので対応が難しくなってしまいますから。
  • SIM
  • 2010/06/04 7:44 PM
なるほど、Fix Packなら確かにそうですね。
メジャーバージョンアップでメインになる
淡い期待を持っていたいと思いますw
コメントする(emailやurlは無記入でもOKです)









この記事のトラックバックURL (※SPAM対策のため、元記事のPermalink URLへのリンクがないものはトラックバックされません)
トラックバック
検索
著書
DB2cover_small.jpg
DB2の管理方法を解説した本を書きました。
ad
リンク集
about this site
recommend
プログラマのためのSQL 第4版
プログラマのためのSQL 第4版 (JUGEMレビュー »)
ジョー・セルコ
名著が第4版として、内容拡充されて発売されました。SQLの考え方を基礎からしっかり学習したい方にお勧めです。
recommend
recommend
WebSphere Application Server 構築・運用バイブル 【WAS8.5/8.0/7.0対応】
WebSphere Application Server 構築・運用バイブル 【WAS8.5/8.0/7.0対応】 (JUGEMレビュー »)
串宮 平恭,達見 圭介,田中 孝清,原口 知子,福崎 哲郎,盛林 哲
WebSphere Application Serverの運用管理本が出ました!WAS v7〜v8.5まで幅広いバージョンに対応しています。
recommend
recommend
Effective Java 第2版 (The Java Series)
Effective Java 第2版 (The Java Series) (JUGEMレビュー »)
Joshua Bloch
すべてのJava開発者必読の書が大幅改訂されて第2版になりました!。
文法などは解説していませんが、Java言語でプログラムを書くにはどういう事に気をつけるべきかという事が非常に端的に、かつ明確な理由とともに解説されています。
第2版ではJava SE 6対応がなされ、第1版で提案してJava SEに取り込まれた部分は整理され、新しい機能であるGenericsやアノテーションについての記述が多数追加されています。以前に増してお勧めできる書になりました。
まだ読んだことが無いJava開発者はぜひ読んでみてください。
recommend
 (JUGEMレビュー »)

基礎的なSQLは書けるようになったけど、今ひとつSQLのルールになんとなくしっくりこない、腑に落ちない。そんな人にお勧めの入門書です。SQLの根底に流れる基本的な考え方をやさしく解説してくれています。(レビューはこちら)
recommend
SQLパズル 第2版 プログラミングが変わる書き方/考え方
SQLパズル 第2版 プログラミングが変わる書き方/考え方 (JUGEMレビュー »)
ジョー・セルコ,Joe Celko
SQL入門を終えて、SQL中級/上級者になりたいと考えている方にぴったりのトレーニング本です(レビューはこちら)
recommend
XML-DB開発 実技コース
XML-DB開発 実技コース (JUGEMレビュー »)
下佐粉 昭,野間 愛一郎,久保 俊彦,高橋 賢司
XML-DBのやさしい入門書です。XMLの基礎から、XPath,XQueryの解説、設計の基礎、Javaでのプログラミング等盛りだくさんの内容です。
recommend
データベースパフォーマンスアップの教科書 基本原理編
データベースパフォーマンスアップの教科書 基本原理編 (JUGEMレビュー »)
エンコアコンサルティング
DBMSの基本的な内部構成、動作についての考え方をやさしく解説してくれています。(レビューはこちら)
recommend
メインフレーム実践ハンドブック z/OS(MVS),MSP,VOS3のしくみと使い方
メインフレーム実践ハンドブック z/OS(MVS),MSP,VOS3のしくみと使い方 (JUGEMレビュー »)
神居 俊哉
メインフレームの技術について、基礎概念から、実践的な使い方までを網羅した初めての解説書です。
recommend
 (JUGEMレビュー »)

CSSの概念/基礎をしっかりと解説してくれるCSS入門書。サイトへの実践的な適用方法も解説されています(レビューはこちら)
無料のDB2 Express-C
DB2 Express-C ダウンロード
recent entries
categories
recent comments
  • DB2でインスタンスを追加で作成するには
    SIM (03/18)
  • DB2でインスタンスを追加で作成するには
    晩衛 (03/17)
  • SQLの学習サイト
    SIM (03/26)
  • SQLの学習サイト
    DB (03/25)
  • IBMとマイクロソフトが提携!AzureでDB2やWebSphereが、IBMクラウドでSQL Serverが提供される事に
    sim (10/25)
  • IBMとマイクロソフトが提携!AzureでDB2やWebSphereが、IBMクラウドでSQL Serverが提供される事に
    INA (10/24)
  • OpenSSLのHeartbleed脆弱性(CVE-2014-0160)は、DB2には影響ありません
    SIM (04/24)
  • OpenSSLのHeartbleed脆弱性(CVE-2014-0160)は、DB2には影響ありません
    oda (04/23)
  • IBM BLU for Cloudの日本語ガイド
    SIM (03/13)
  • IBM BLU for Cloudの日本語ガイド
    Okajima (03/13)
recent trackbacks
archives