取得したデータをカラムの値でソート(ORDER BY句)
SELECT 文を使ってデータを取得すると取得元のテーブルに格納されている順番に従って値を取得しますが、 ORDER BY 句を使用することで指定したカラムを基準に並べ替えを行ってからデータを取得することもできます。ここでは SQLite で ORDER BY 句を使ってデータをソートした上で取得する方法について解説します。
(Last modified: )
ORDER BY句を使った並び替え
SELECT 文を使ってデータを取得するときに ORDER BY 句を使って指定のカラムを基準に並べ替えをすることができます。書式は次の通りです。
SELECT カラム名 , ... FROM テーブル名 ORDER BY カラム名 [ASC | DESC];
ORDER BY 句の後にソートを行う対象のカラム名と昇順か降順かを指定します。昇順の場合は ASC 、降順の場合は DESC を指定します。省略した場合は昇順でソートが行われます。
またソートする対象のカラムは複数指定できます。その場合はカンマ(,)で区切り続けて記述して下さい。複数のカラムを指定した場合には、まず最初のカラムでソートを行い、次に最初のカラムで同じ値だったものだけを対象に2番目のカラムでソートを行います。3つ以上指定した場合も同じです。
SELECT カラム名 , ... FROM テーブル名
ORDER BY カラム名1 [ASC | DESC], カラム名2 [ASC | DESC], ...;
----
実際に試してみます。次のようなテーブルを作成しました。
create table user(name text, old integer, address text);
INSERT 文を使ってテーブルにデータをいくつか格納しておきます。
insert into user values('Yamada', 19, 'Tokyo');
insert into user values('Andou', 34, 'Osaka');
insert into user values('Kuwata', 26, 'Tokyo');
insert into user values('Hoshi', 18, 'Tokyo');
insert into user values('Suzuki', 27, 'Osaka');
insert into user values('Yoshida', 31, 'Tokyo');
insert into user values('Anzai', 28, 'Nagoya');
insert into user values('Etou', 19, 'Tokyo');
データは追加した順にテーブルに格納されていきます。ソートを行わずにデータを取得した場合、テーブルに格納されている順番でデータを取得します。
select * from user;
それでは old カラムの値でソートしてからデータを取得します。まずは昇順でソートしてみます。
select * from user order by old asc;
old カラムの値で昇順に並び替えられた結果を取得することができました。
今度は同じ old カラムにを対象に降順でソートしてみます。
select * from user order by old desc;
old カラムの値で降順に並び替えられた結果を取得することができました。
このように指定したカラムに格納されている値を使って昇順または降順でデータを並び替えた上で取得することができます。
複数のカラムを対象に並び替えを行う
複数のカラムでソートした場合を試してみます。最初に address カラムだけでソートした結果を見てみます。
select * from user order by address asc;
次に address カラムの値でソートした上で address カラムの値が同じデータに対して old カラムの値でソートします。ORDER BY句の後に記述する順番に気を付けて下さい。
select * from user order by address asc, old asc;
address カラムの値で並び替えをしたあとで、さらに old カラムで並び替えをした結果を取得することができました。
-- --
ORDER BY 句を使ってデータをソートした上で取得する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。