【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について質問があれば随時募集しています。
ご遠慮なくお問い合わせください.
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_