SQLite | データの検索 | ORDER BYで行を並べ替える

検索結果を指定カラムで並べ替えるにはORDER BY句を使います。ここでは、その使い方を説明します。

ORDER BY句で並べ替える

SELECTORDER BYを使うと、指定カラムを基準に並べ替えられます。構文は次のとおりです。

SELECT カラム名, ... FROM テーブル名 ORDER BY カラム名 [ASC|DESC];

ORDER BYの後にカラムと方向を指定します。昇順はASC、降順はDESCで、省略時は昇順です。

複数カラムはカンマで区切ります。最初のカラムで並べ替え、同値の行を次のカラムで並べ替えます。

SELECT カラム名, ... FROM テーブル名
  ORDER BY カラム名1 [ASC|DESC], カラム名2 [ASC|DESC] ...;

例として次のテーブルを作成します。

create table user (name text, old integer, address text);
sqlite> create table user (name text, old integer, address text);
sqlite> 

テーブルにデータを追加します。

insert into user values ('devkuma', 39, 'Seoul');
insert into user values ('kimkc', 34, 'Busan');
insert into user values ('araikuma', 26, 'Seoul');
insert into user values ('happykuma', 19, 'Seoul');
insert into user values ('mykuma', 27, 'Daejeon');
insert into user values ('yourkuma', 28, 'Gwangju');
insert into user values ('raccoon', 31, 'Busan');
sqlite> insert into user values ('devkuma', 39, 'Seoul');
sqlite> insert into user values ('kimkc', 34, 'Busan');
sqlite> insert into user values ('araikuma', 26, 'Seoul');
sqlite> insert into user values ('happykuma', 19, 'Seoul');
sqlite> insert into user values ('mykuma', 27, 'Daejeon');
sqlite> insert into user values ('yourkuma', 28, 'Gwangju');
sqlite> insert into user values ('raccoon', 31, 'Busan');
sqlite>

まず明示的に並べ替えずに検索します。

select * from user;
sqlite> select * from user;
name        old         address   
----------  ----------  ----------
devkuma     39          Seoul     
kimkc       34          Busan     
araikuma    26          Seoul     
happykuma   19          Seoul     
mykuma      27          Daejeon   
yourkuma    28          Gwangju   
raccoon     31          Busan     
sqlite> 

oldを昇順で並べ替えます。

select * from user order by old asc;

oldが小さい順に表示されます。

sqlite> select * from user order by old asc;
name        old         address   
----------  ----------  ----------
happykuma   19          Seoul     
araikuma    26          Seoul     
mykuma      27          Daejeon   
yourkuma    28          Gwangju   
raccoon     31          Busan     
kimkc       34          Busan     
devkuma     39          Seoul     
sqlite> 

次にoldを降順で並べ替えます。

select * from user order by old desc;
sqlite> select * from user order by old desc;
name        old         address   
----------  ----------  ----------
devkuma     39          Seoul     
kimkc       34          Busan     
raccoon     31          Busan     
yourkuma    28          Gwangju   
mykuma      27          Daejeon   
araikuma    26          Seoul     
happykuma   19          Seoul     
sqlite> 

oldが大きい順に表示されます。

このように指定カラムで昇順または降順に並べ替えられます。

複数カラムで並べ替える

まずaddressだけで並べ替えます。

select * from user order by address asc;
sqlite> select * from user order by address asc;
name        old         address   
----------  ----------  ----------
kimkc       34          Busan     
raccoon     31          Busan     
mykuma      27          Daejeon   
yourkuma    28          Gwangju   
devkuma     39          Seoul     
araikuma    26          Seoul     
happykuma   19          Seoul     
sqlite> 

次にaddressで並べ替え、同じ住所の行をoldで並べ替えます。ORDER BYに記述する順序が優先順位になります。

select * from user order by address asc, old asc;
sqlite> select * from user order by address asc, old asc;
name        old         address   
----------  ----------  ----------
raccoon     31          Busan     
kimkc       34          Busan     
mykuma      27          Daejeon   
yourkuma    28          Gwangju   
happykuma   19          Seoul     
araikuma    26          Seoul     
devkuma     39          Seoul     
sqlite> 

結果は最初にaddress、次にoldで並んでいます。