物流・倉庫・WMS・プログラマ日記

物流・倉庫・WMS・プログラマ日記

在庫管理・倉庫管理を扱う事が多いプログラマの備忘録です。

【SQLを丁寧に理解する】ROWNUM と ORDER BY ~PART1:ROWNUMとは~

こんにちは、EightyEightRiceです。

 

今日の記事は、【SQLを丁寧に理解する】ROWNUM と ORDER BY ~PART1:ROWNUMとは~  です。

データベースを扱い場合に、よくハマってしまう項目について、丁寧に説明していきます。

ざっと読み飛ばすだけでも、

「へぇーそうなんだ」

と、思っていただけるような構成を心がけています。

 

今回は

ROWNUM と ORDER BY ~PART1:ROWNUMとは~

です。

こんな話を聞いた事はありませんか?

「ROWNUMとORDER BY を一緒に使ってはいけない」

 

結論は、「ROWNUMとORDER BYは、一緒に使って良い場合と悪い場合がある」です。

あるSQLの結果に対して、

ORDER BY でソートして、WHERE句で「ROWNUM = 1」のような使い方

は、かなり危険です。 

しっかりと理解する為に、以下の2つのポイントに分けて解説していきます。

・ROWNUMとは

SQLの実行順序

 

今回はROWNUMについて解説します。

 

ROWNUMとは正式名称をROWNUM疑似列といいます。

"疑似"というくらいなので、実際にデータとして存在するでありません。

SQL文のSELECT句に、通常の列を選択するように、

 

SELECT

    会社コード

  , 社員コード

,   ROWNUM

とROWNUMを記述できます。

SELECTの直後でも列Aと列Bの間でも任意の場所でOKです。

 

このSELECT文の実行結果に1から重複しない連番(※)として抽出されるのがROWNUMです。

具体的に、例えば上記SELECT文の結果が999行であった場合、以下のようなROWNUM列の値が得られます。

 

会社コード   会社コード    ROUNUM

A001             B003                  1

A002             B004                  2

A002             B005                  3

A100             B200              999

 

ここで 1から重複しない連番と意味についてですが以下のようになります。

"1から"        :0から100から始まったりせず必ず1から始まる

"重複しない" :番号全体の中で同じ番号がない、同じ番号は1度しか使えない

"連番"            :1の次は2、2の次は3というように飛び番号がない

 

今回解説したポイント

「ROWNUMの 1から重複しない連番

と、次回のポイントの 「SQLの実行順序」から、なぜ

ORDER BY でソートして、WHERE句で「ROWNUM = 1」のような使い方

は、かなり危険なのか解説していきます。

 

以上、解説でした。

 

/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_

SQLについて質問があれば随時募集しています。

ご遠慮なくお問い合わせください.

/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_