2017-08-11 5 views
0

SQLデータベースにShipCountry、ShipCity、Freightの列を持つテーブルがあります。私はそのテーブルから以下のクエリを使用してデータを取得しようとしました。ソートせずにデータベースのようなデータを取得

Select ShipCountry from CountryDetails Group by ShipCountry 

このクエリを実行すると、結果が昇順で表示されます。代わりに、私はデータベースの順序でデータが必要です。どのようにSQLクエリを通じてこれを達成するには?

注:以下のクエリを実行すると、データベースの順序でデータが返されます。私はクエリでgroup by節を追加したときにソートされたデータを取得しています。

発注のためでグループを使用することは不適切である
Select ShipCountry from CountryDetails 
+0

こんにちは。あなたは疑問が少しはっきりしています。架空のデータセットを提示して、あなたのクエリの結果になりたいものはありますか?ありがとう – Christos

+5

ちょうどメモ、「データベース注文」の本当の概念はありません。これは単にデータベースがメモリー/ディスクから行をロードする順序です。これは、時間の経過とともに、データベースの再起動などの間に変更される可能性があります。 – wmorrell

+0

お返事ありがとうございます。ここで私がデータベースの順序を言及するのは、データがテーブルに格納されているか入力されていることです。あなたのポイントデータベースの順序は、データベースの再起動の間、時間の経過と共に変化する可能性があります。 –

答えて

6

..(グループによっては、MIN、MAXなど集計関数のためであるかカウント)

あなたが特定の順序の使用が必要な場合はorder by代わり

Select ShipCountry from CountryDetails Order by ShipCountry 

そう

Select ShipCountry from CountryDetails 

が目を覚えて、単に使用することを注文していないしたい場合db内の値ストアで適切な順序ではなく、データの取得に使用される順序で選択されます。

あなたはesplicitally避ける「冗長値」のために

によって順序を使用しなければならないために必要とするたびに...などではっきりとしないグループを使用:あなたは同じにしたい場合は

Select distinct ShipCountry from CountryDetails 
+0

ありがとうございます。私は注文したくない。私は単に以下のクエリを使用しました。 ShipCountry from CountryDetails これを実行すると、冗長なShipCountry値が返されます。冗長な値を避けるために、私はクエリでgroup by句を追加しました。 私の目的は、私はascやdescのような注文はしたくないし、私は冗長なデータを望まない。 –

+2

@UmapathySデータの配布の変更により、データベースの順序がいつでも変更される可能性があることが分かっている限り、これは、結果セットのソート順がある日から別の日に変わる可能性があることを意味します。それがあなたが一緒に暮らすことができるものならば、是非 'SELECT FROM'を使ってください。 – SchmitzIT

+0

@SchmitzITご返信ありがとうございます。 –

0

ほとんどの場合、プライマリキーでソートした場合、注文することなく同じことになります:

ここでidはプライマリキーですそれ:

ID名

1エリー

2アフマド

3ジョセフ

4オマール

+0

すべてのテーブルにのみPKがある場合。 ( – SchmitzIT

+0

ようこそ( "あなたが言ったことを理解しています:(")、すべてのテーブルには1つのPKしかなく、IDはPKではありませんが、 PKはアイデンティティであり、PKはテキストであり、テキストの場合には、所望の注文は利用できないので、新しい番号アイデンティティ列を追加することにより、所望の注文を与えることができる –

2

すでに述べたように、あなたはあなたの最後あちこちに予期しない結果につながる可能性を説明するものユーザー。

インデックスやキーのないテーブル(いわゆるヒープ)があるとします。ヒープは、電話帳(ええと、私はしばらくの間行ってきました)と数多くのページから構成され、情報がランダムに並べられています。ヒープはまさにそれです。多くのランダムに順序付けされたデータ。このようなテーブルからクエリを実行するときはいつでも、クエリアナライザはデータを提供する最も速い方法が何であるかを把握するために最善を尽くします。

クエリアナライザからのこのような決定は、統計によってガイドされます。データおよびその分布に関するメトリックの集合。 SQL Serverでは、これらの統計値を使用してカーディナリティ(値の一意性)を把握し、データを返す最速の方法を選択します。

ヒープ上に単にSELECT * FROM myTableを発行すると、それらの統計によってデータが返される順序が決まります。しかし、これはまた、時間の経過とともに、より多くのデータが表に流入すると、統計が変化することを意味します。これは、今日のデータのソート順が必ずしも明日、または今から5分後に返さ​​れるソート順ではないという効果があります。

これがエンドユーザーにとって問題がなければ、SELECT * FROM myTableが最適です。ただし、特定の順序でデータを返す必要がある場合は、常にORDER BY句を実装する必要があります。

関連する問題