【馬王Z SQL講座】 データの並び替え
SELECT文でデータの取得
まずは前回の復習として、競走馬マスタ テーブルから
- 血統登録番号
- 馬名
を5行取得してみましょう。
SELECT TOP 5 血統登録番号, 馬名 FROM 競走馬マスタ ;
このクエリを実行すると、下図のような結果が得られます。*1
この結果はたまたま競走馬マスタ テーブルの先頭に格納されていたデータを取得しただけなので、あまり意味がありません。
ORDER BY 句:昇順に並び替え
SELECT文で取得した結果を並び替えるには ORDER BY 句を使います。
ORDER BY 句に並び替えに使いたいカラムを書きます。
SELECT TOP 5 血統登録番号, 馬名 FROM 競走馬マスタ ORDER BY 血統登録番号 ;
このクエリを実行すると、血統登録番号が昇順(小さい順)に5件データが出力されます。*2
DESC:降順に並び替え
降順(大きい順)に並び替えたい場合は ORDER BY 句で指定したカラムの後ろに DESC を付け加えます。
SELECT TOP 5 血統登録番号, 馬名 FROM 競走馬マスタ ORDER BY 血統登録番号 DESC ;
このクエリを実行すると、血統登録番号が降順に5件データが出力されます。
同値のデータがあった場合
競走馬マスタ テーブルから、生年月日を降順に5件取得するクエリを書いてみましょう。
SELECT TOP 5 血統登録番号, 馬名, 生年月日 FROM 競走馬マスタ ORDER BY 生年月日 DESC ;
このクエリを実行すると、下図のデータが出力されました。
TOP 5 と指定したはずなのに6行ありますね。何故でしょう?
生年月日が大きい方から4番目のデータは 2019/06/09 で、同じ生年月日の馬は3頭います。
このように TOP と ORDER BY を併用すると、上位n番目(nは TOP で指定した数)に同値のデータがあった場合n件より多いデータが出力されるので注意が必要です。*3
上位n番目に同値のデータがない場合
挙動を理解するために、同様の条件で上位9件取得してみましょう。
SELECT TOP 9 血統登録番号, 馬名, 生年月日 FROM 競走馬マスタ ORDER BY 生年月日 DESC ;
このクエリを実行すると、下図のデータが出力されました。
生年月日が 2019/06/09 のデータが3件、2019/06/06 のデータが2件ありますが、9件目には同値のデータがないので指定したとおり9件出力されています。