結果表における行の順序の差異
同一の SELECT ステートメントに対して複数の結果表がある場合、それらの表の行は同じ順序で表示されない可能性があります。 データベース・マネージャー は、SELECT ステートメントが ORDER BY を使用していない限り、行の順序を重要とは見なしません。 そのため、同じ
DEPTNO
値を持つ行がいくつかある場合には、
2 番目の SELECT ステートメントが最初のものとは違う順序で行を検索する場合があります。 保証されているのは、ORDER BY DEPTNO 節での要求に従って、
それらすべてが部門番号の順に並べられるということだけです。同じ SQL ステートメントを同じホスト変数を指定して 2 度実行したとしても、順序付けが異なる場合があります。 例えば、2 度目の実行がなされるまでの間にカタログの統計が更新されたり、索引が作成されるかドロップされる場合もあります。 その後で SELECT ステートメントをもう一度実行することも考えられます。
2 番目の SELECT に、最初の SELECT にはない述部がある場合は、順序付けが変更される可能性が高くなります。 データベース・マネージャー は、新しい述部で索引を使用することを選択できます。 例えば、この例で、データベース・マネージャーが最初のステートメントに対しては LOCATION
上の索引を選び、2 番目のものに対しては DEPTNO
上の索引を選ぶ場合があります。 行は索引キーの順に従って取り出されるため、
2 番目の順序は最初の順序と同じとは限りません。
また、2 つの同様な SELECT ステートメントを実行したときに、
統計が変更されず、索引の作成もドロップも行われなかったにもかかわらず、行の順序が異なる場合があります。 この例では、
LOCATION
に多数の異なる値がある場合、 データベース・マネージャー は、両方のステートメントに対して LOCATION
上の索引を選択できます。 しかし、2 番目のステートメントの DEPTNO
の値を以下の例に変更すると、 データベース・マネージャー が DEPTNO
上の索引を選択する可能性があります。 SELECT * FROM DEPARTMENT
WHERE LOCATION = 'CALIFORNIA'
AND DEPTNO >= 'Z98'
ORDER BY DEPTNO
SQL ステートメントの形式とこのステートメントの値との間にはわずかな関係しかないため、 順序が ORDER BY 節で固有のものとして定められているのでない限り、 2 つの異なった SQL ステートメントが同じ順序で行を戻してくるとは考えないでください。