| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 1 2 次のページ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 結果セットにおける行番号の指定 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Oracleでは、結果セットの特定の行だけを表示するために、ROWNUM疑似列およびLINEBETWEEN条件が使えます。次のSQL文はROWNUMを用いた例です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT * FROM 商品マスタ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PostgreSQLには、等価な機能を実現できるOFFSET、LIMITがあるので、表4のような組み合わせで変換します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
表4:特定行の表示機能の変換 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ただし、PostgreSQLのLIMIT、OFFSETはWHERE句の一部ではないので、ROWNUMを削除するだけではなく、WHERE句に条件の指定がない場合には、WHERE句も削除する必要があるので注意が必要です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT * FROM 商品マスタ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
図4は、このSQL文の実行結果です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
図4:「LIMIT/OFFSET」を利用した実行結果 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| OFFSET + LIMIT を LINE BETWEENで実現する | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
例えば、下記のようなPostgreSQL用のクエリがあったとします。これは、結果を2行捨てて3行目から3行分表示させるものです。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT 商品ID, 商品名, 卸単価 FROM 商品マスタ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Oracleで同じことをするには、下記のようにROWNUM擬似列を使い、lineのような別名の列にし、それをBETWEEN句で絞る方法が使えます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT * | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
上記のテクニックは、若干「むりやり感」がありますが、これは下記のように単純にROWNUMをBETWEEN句で用いてしまうと、期待する結果が得られないためです。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT * FROM 商品マスタ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| アウタージョインの構文の違い | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Oracle、PostgreSQLともにOUTER JOINの機能がありますが、構文が違いますのでOracleの(+)を使った記法を次のように変更する必要があります。 Oracleのアウタージョインの構文 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT B.商品名, SUM(A.数量) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PostgreSQLのアウタージョインの構文 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT B.商品名, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 図5はその実行結果です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
図5:アウタージョインの実行結果 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 1 2 次のページ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 書籍紹介 まるごと PostgreSQL! Vol.1 日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。発売日:2004/12/08発売 定価:\1,890(本体 \1,800+税) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||


