Oracleデータベース上のROWNUMのアプリケーション

  クエリから順番に番号が割り当てられるOracleシステムは、最初の行がリターンが割り当てられ、行を返す第2行であり、そのために、このフィールドは、ダミークエリが返すに行数を制限するために使用することができ、およびROWNUMない接頭辞として任意のテーブル名に。

  次の文は動作しませんよう。

選択学生。*、student.rownum から学生。

  あなたが動的に生成され、この擬似フィールドを表示したい場合は我々ROWNUMの列には、次の文を使用します。

選択トンを。*、ROWNUM から学生トン。

  我々は、クエリに制約を追加した場合は、動的に生成されたROWNUMを回します。結論は、ROWNUMが生成するクエリの記録に基づいている任意の行にバインドされる予定されていないということです。

選択トンを。*、ROWNUM からスチューデントt セージ> 25 

  ROWNUMを使用した場合、ROWNUMの特殊な性質のためには、我々は次のように注意しなければなりません。

  • あなたが最初の学生情報学生テーブルを検索したい場合は、条件としてROWNUMの= 1を使用することができます。しかし、学生はROWNUMの= 2つのデータの使用の結果を見つける、二学生情報でテーブルを見つけたいです。ROWNUMは常に1から始まるので、このように上記の条件は自然数に等しいROWNUM、判定を行うROWNUMを見つけることができません= N(N> 1は自然数)偽です。
SELECT  *  から学生ROWNUM = 1を ;   - 最初のレコードに問い合わせることができます。SELECT * から学生ROWNUM = 2 ;   - クエリ第二ではないのレコード 
   
  • あなたはレコードが見つかった後、第2列目から録音したい場合は、レコードをチェックアウトされていませんROWNUMの> 2を使用し、ROWNUMによるものである疑似列1は、スタートから常にあり、OracleはROWNUMの>はn(nは> 1は自然数であると信じてレコードを見つけ出すようにする)この状態はまだ確立されていません。
SELECT  *  からの学生は、WHERE ROWNUMの>  2 ;   - レコードを照会することはできません。
  • あなたが前3番目のレコードに録音したい場合は発見され、ROWNUM <3を使用する際には、2つのレコードを取得することです。レコードを見つけることができるように、設定された条件の明らかROWNUMについてROWNUM <N(N> 1の自然数)。
SELECT  *  から学生WHERE ROWNUM <  3。 ;   - 二つのレコードを選択する前に、
  • あなたは3つのレコードクエリにしたい場合は、ケースには、より複雑な意志のいくつかを検討する必要がありますが、例えば、私たち学生ID(SID)と年齢(SAGE)、クエリの最後の3つのレコードによって、逆の順序、どのような結果を以下の2つのSQL文を確認してください類似点と相違点:
-   通常の復帰最後の3つのレコード
SELECT  *  からの学生ROWNUM < 4 発注することにより、SID DESC ;
 -   のための最初の3つのレコードへの復帰SELECT * からの学生ROWNUM < 4 受注により、 SAGEのDESC ;   
     

  私たちは、同じSQL文を見ることができますが、配置が同じ順序ではない、全く異なる結果につながっています。二つの文の比較は、第二文ROWNUMないSAGEシーケンス番号を生成するためにカラムが、参照により組み込ま生成​​された主キーのレコードで見ることができます。我々は成功した最初の文の使用で最後の3つを獲得することができた理由は、その理由は、最初の文は、主キーによって順序付けされていることです。

  • あなたは非プライマリキーを基準に基づいて、レコードの最後の番号を抽出したい場合は、私たちは、複雑なクエリを使用する必要があります。
選択 *  から選択 *  から学生順序 によってセージDESCここで ROWNUM <  4
  • 時々、私たちは次のように私たちが使用するSQL文であり、第20条に戻るには、例えば、指定した範囲内の10のリターンレコードを期待し、記録ページングする必要があります。
SELECT  *  から学生ROWNUM < 20である、
マイナス     -   2つのレコードセットが減算されるSELECTを* から学生ROWNUM < 10 
   

  若しくは

選択 *  から選択。ROWNUMのR、学生*  から学生ここで ROWNUM <  20  順番 によって SID)ここで、R > =  10
  • ROWNUMを述べ、Oracleは別のテーブル隠し列を取得しなければならなかった:ROWID、一意のデータの行を識別することを、すべてのテーブルに存在しているOracleによって自動的にプロパティを生成し、管理している、私たちは、これはOracleのデータシートであると言うことができますスーパーキーは、同じデータベースに、このスーパーキーが繰り返されることはありません。ROWIDは、主にビット本のページのように、迅速にデータラインの位置を特定するために使用されて、あなたはすぐに一般的にインデックスで使用される、コンテンツを見つけることができます。このSQL文の下には、私たちは、データの各行のROWIDを見るのを助けることができます。
選択学生。*、のROWID から学生。

 

おすすめ

転載: www.cnblogs.com/xiaogongjin/p/11828562.html