トップページ >  Oracle SQL >  検索結果をソートする
初版2006/04/11: 最終更新日2012/01/25
  検索結果をソートする
目次
検索結果をソートする
distinctとorder by
検索結果をソートする
select文でデータを取得した時、あるフィールドの昇順とか降順にソートして表示したい場合があります。
この場合、SQLでは order by を使用します。指定する場所はwhere句の後になります。

select   pn,order_no
from     parts_tbl
order by order_no asc;

上記のSQL文にはwhere句がないのでfrom句の後にorder byを指定します。指定方法は

order by フィールド名 というように書きます。上のSQL文にはフィールド名の後に asc キーワードが指定されてますが、これは昇順にソートしたい場合に指定します。但し、ascを省略した場合、デフォルトで昇順にソートされますのでascは指定してもしなくても同じになります。
逆に、降順にソートしたい場合は

order by フィールド名 desc

というように指定しなくてはいけません。

具体的に、下図のような表があるとします。

検索結果をソートする
検索結果をソートする

これに対して上のSQL文を実行してorder_noの昇順にソートしなおした気かkが下図のようになります。

検索結果をソートする
検索結果をソートする

order byは一つの列だけでなく、複数の列を指定することも出来ます。例えば

order by フィールド1,フィールド2

と言った感じでカンマ区切りで複数のフィールドを指定できます。
この時のソートはまず、フィールド1で昇順にソートします。その後にフィールド2で昇順にソートします。
以下の例を見てください。

検索結果をソートする
検索結果をソートする

このような表をまずフィールド1でソートします。下図がその結果です。

検索結果をソートする
検索結果をソートする

次にこの結果に対してフィールド2でソートします。下図がその結果です。

検索結果をソートする
検索結果をソートする

order byで複数列指定した場合はこのようにソートが行われていきます。

distinctとorder by
select distinct id from employee order by id;

というようにorder byとdistinctと併用すると正常にソートされません。 distinctしたデータに対してorder byしたい場合副問合せを使用して、order byした後にdistinctする必要があります。