取得したデータをカラムの値でソート
SELECT文でデータを取得すると取得元のテーブルに格納されている順番に取得しますが、指定した方法で並べ替えを行った上で取得することもできます。ここではデータをソートした上で取得する方法について解説します。
データを取得する時にソートする場合の書式は次の通りです。
SELECT カラム名 , ... FROM テーブル名 ORDER BY カラム名1 [ASC | DESC], カラム名2 [ASC | DESC], ...;
ORDER BY句の後にソートを行う対象のカラム名とソートを昇順/降順のどちらで行うのかを指定します。昇順の場合は「ASC」、降順の場合は「DESC」を指定します。省略した場合は昇順でソートが行われます。
またソートする対象のカラムは複数指定できます。その場合はカンマ(,)で区切り続けて記述して下さい。複数のカラムを指定した場合には、まず最初のカラムでソートを行い、次に最初のカラムで同じ値だったものだけを対象に2番目のカラムでソートを行います。3つ以上指定した場合も同じです。
実際に試してみます。次のようなテーブルを作成しました。
create table user(name text, old integer, address text);
次のようなデータをテーブルに格納しておきます。
データは追加した順にテーブルに格納されていきます。ソートを行わずにデータを取得した場合、テーブルに格納されている順番でデータを取得します。
select * from user;
それでは「old」カラムの値でソートしてからデータを取得します。まずは昇順でソートしてみます。
select * from user order by old asc;
次は先ほどと反対で降順でソートしてみます。
select * from user order by old desc;
このように指定したカラムに格納されている値を使って昇順または降順でデータを並び替えた上で取得することができます。
----
次は複数のカラムでソートした場合を試してみます。まず「address」カラムの値でソートしてからデータを取得します。
select * from user order by address asc;
「address」カラムの値でソートした上で「address」カラムの値が同じデータに対して「old」カラムの値でソートします。ORDER BY句の後に記述する順番に気を付けて下さい。
select * from user order by address asc, old asc;
上記では例えば「address」カラムの値が「'Tokyo'」のデータがさらに「old」カラムの値で昇順にソートされていることが確認できます。
( Written by Tatsuo Ikura )