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で複数列指定した場合はこのようにソートが行われていきます。
select distinct id from employee order by id;
というようにorder byとdistinctと併用すると正常にソートされません。
distinctしたデータに対してorder byしたい場合副問合せを使用して、order byした後にdistinctする必要があります。