web-dev-qa-db-ja.com

「順序」が指定されていない場合、レコードセットに対してクエリはどの順序を選択しますか?

私は、「Order by」ルールが指定されていないクエリは、where句で指定された結果に基づいてこれを並べ替えるという印象を常に持っていました。

例えば、私のwhere句は次のように述べています:

WHERE RESULTS_I_AM_SEARCHING_FOR IN
ITEM 1
ITEM 2
ITEM 3

アイテム1、2、および3に対して返される結果は、どこで指定された順序になると想像していましたが、そうではありません。指定されていない場合、誰がそれを並べ替えるかを知っていますか?

本当に基本的な質問をありがとう。

デイモン

33
dmoney

ORDER BYを指定しない場合、NO ORDERが定義されます。

結果は任意の順序で返される可能性があり、時間とともに変化する可能性もあります。

(少なくとも私の知る限り)リレーショナルデータベースには、「自然な順序」などはありません。信頼できる順序を取得する唯一の方法は、explicitlyORDER BY句を指定することです。

Update:まだ私を信じていない人のために-この点を説明する2つの優れたブログ投稿があります(コードサンプル付き!):

49
marc_s

既に述べたように、「デフォルトの順序」は存在しないため、これに依存しないでください。とにかく、まだSQLサーバーの実装に関するいくつかの興味深い詳細を知りたい場合は、これをチェックアウトできます。

http://exacthelp.blogspot.co.uk/2012/10/default-order-of-select-statement-in.html

2
user2703636