rowID
とrowNUM
の違いを知りたい
そして、これらの両方を表で見る方法。
私がこれを実行すると:
SELECT * FROM emp WHERE rownum=1
1つのクエリを返しますが、rowidに対して同じことをすると、
一貫性のないデータ型:予想されるROWIDはNUMBERになりました
また、一部のテーブルでも、rownumはnullを返します。なぜそうなのか?
これを明確にしてください:rowid vs rownum?(デモクエリ)
ありがとうございました
編集:エイリアスを使用してROWID
およびROWNUM
(疑似列であるため)を表示する必要があります。
SELECT rownum r1, rowid r2 FROM emp
Rownumとrowedは両方とも疑似列です。
Rowid
データベース内の各行について、ROWID疑似列は行のアドレスを返します。
クエリの例は次のとおりです。
SELECT ROWID, last_name
FROM employees
WHERE department_id = 20;
ROWIDの詳細はこちら: https://docs.Oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns008.htm
Rownum
クエリによって返される各行について、ROWNUM疑似列は、Oracleがテーブルまたは結合された行のセットから行を選択する順序を示す数値を返します。選択された最初の行には1のROWNUMがあり、2番目には2が続きます。
次のようにrownumを使用して、結果の量を制限できます。
SELECT * FROM employees WHERE ROWNUM < 10;
Rownumの詳細はこちら: https://docs.Oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
差
rowid
とrownum
の実際の違いは、rowidはその行の永続的な一意識別子です。ただし、rownumは一時的なものです。クエリを変更すると、rownum番号は別の行を参照しますが、rowidは参照しません。
したがって、ROWNUMは特定のSQLステートメントにのみ適用される連続した番号です。反対に、行の一意のIDであるROWID。
Rownum(数値) =出力の生成されたシーケンス番号。
Rowid(16進数) =行の挿入時に自動的に生成されます。
SELECT rowid,rownum fROM EMP
ROWID ROWNUM
----- ----------------------
AAAR4AAAFAAGzg7AAA, 1
AAAR4AAAFAAGzg7AAB, 2
AAAR4AAAFAAGzg7AAC, 3
AAAR4AAAFAAGzg7AAD, 4
AAAR4AAAFAAGzg7AAE, 5