アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQL Server2005 で開発しています。

Order by で並び替えてレコードをSelectする際に、
Order by の対象列データが同じ場合は、
どういった順番でレコードが取得できるのでしょうか?

TableA
No | Data1 | Data2
  1| AAA | 100
  2| AAA | 200
  3| AAA | 300
  4| ABC | 400
  5| BBB | 500
(Noはクラスタ化PK)

例えば、上のようなテーブルから次のSQLを実行すると
 (1)Select * From TableA ;
 (2)Select * From TableA Order by Data1 Asc;
 (3)Select * From TableA Order by Data1 Asc, No Asc;

 (1)(2)(3)全て、次の順で返ってきました。
  1| AAA | 100
  2| AAA | 200
  3| AAA | 300
  4| ABC | 400
  5| BBB | 500

 しかし、(2)のSQLは、データによって
 次の順で返ってくることがありました。
  3| AAA | 300
  1| AAA | 100
  2| AAA | 200
  4| ABC | 400
  5| BBB | 500
 
 1~3レコード目までは全てData1がAAAのレコードですが
 特に指定していなくても、No(PK)の順になるのかと思っていました。
 
 なお、レコードができた(Insert順)でもなさそうです。
 この、順番は何で決まっているのでしょうか?
 

A 回答 (3件)

>特に指定していなくても、No(PK)の順になるのかと思っていました。



下記のリンクに「ORDER BY 句が指定されていない限り、結果セットとして返される行の順序は保証されません。」と書いてあるので実際、保証されていないのだと思います。

http://msdn.microsoft.com/ja-jp/library/ms188385 …

で、実際にどういう順番で返ってくるのかはインデックスの種類(クラスタかどうかなど)や設定状況によって変わってくるのでケースバイケースだと思います。
    • good
    • 1
この回答へのお礼

ありがとうございます。
リンク先の↓を見て、すっきりしました。

「ORDER BY 句が指定されていない限り、結果セットとして返される行の順序は保証されません。」

お礼日時:2012/07/13 18:54

ソートアルゴリズムを勉強すれば分かりますが、ほとんどのソートアルゴリズムはキーで指定された以外のデータ順については保障がありません。

(安定的なソートではない)。
また、RDBMSが仮に安定的なソートアルゴリズムであっても、どのような順序にデータをフェッチするかはRDBMSの実装に依存しています。
> この、順番は何で決まっているのでしょうか?
きまりはないと思ってください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2012/07/13 19:02

SQL Serverのローカルルールはよくわかりませんが


たいていのSQLではORDER BYで明示されていない場合は
表示順序は保障されない(つまり何順かわからない)
というのが原則だと思います

どうしても確定した表示が必要であれば、なんらかの
ユニークな属性のついたカラムでorder byしてやることです
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2012/07/13 18:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す