3

私は主にOracleとPostgreSQLデータベースで作業してきましたが、共通の標準があるかどうか知りたいです。Order Byタイトルが示すように、私はSQLステートメントの句に関する質問への回答を探していました。たとえば、基本的なテーブルがある場合Users

-------------------------------------------
| id |     name     | birth_date | gender |
-------------------------------------------
|  1 |  xx_coolKid  | 12-DEC-1960|   M    |
-------------------------------------------
|  2 |  def@test.co | 24-JUN-1976|   F    |
-------------------------------------------
|  3 |    NULL?     | 30-AUG-1990|   M    |
-------------------------------------------
|  4 |    JeffR     | 12-DEC-1960|   M    |
-------------------------------------------
|  5 |    lol19     | 12-DEC-1960|   F    |
-------------------------------------------

そして私はクエリを実行することになっていました:

SELECT * FROM Users ORDER BY gender, birth_date;

genderとの両方に一致する、返される行に特定の順序はありbirth_dateますか?ORDER BYまたは、句が定義されていないかのように、一致する行の戻り順序が保証されていませんか?

4

1 に答える 1

4

返品の注文は保証されません。この分野には明確な基準はありません。キーの値が同じ場合の戻り順序は任意であり、同じデータベースで同じデータを実行するたびに変わる可能性があります。

一部のソートアルゴリズムは安定しています。つまり、入力のレコード順序は暗黙の最終順序キーです。ただし、データベースは通常、安定したソートを実装していません。

のMicrosoftSQLドキュメントは、order by実際にこれを非常によく説明しています。

OFFSETとFETCHを使用してクエリ要求間で安定した結果を得るには、次の条件を満たす必要があります。

(1)クエリで使用される基になるデータは変更してはなりません。つまり、クエリによって処理された行が更新されないか、クエリからのページに対するすべての要求が、スナップショットまたはシリアル化可能なトランザクション分離を使用して単一のトランザクションで実行されます。これらのトランザクション分離レベルの詳細については、「トランザクション分離レベルの設定(Transact-SQL)」を参照してください。

(2)ORDER BY句には、一意であることが保証されている列または列の組み合わせが含まれています。

これらの条件は、ほとんどのデータベースに当てはまります。

于 2013-02-28T01:59:26.963 に答える