|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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+税) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||


