SQLite | データの検索 | ORDER BYで行を並べ替える
検索結果を指定カラムで並べ替えるにはORDER BY句を使います。ここでは、その使い方を説明します。
ORDER BY句で並べ替える
SELECTでORDER 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で並んでいます。