SQLite | 데이터 조회 | 데이터를 컬럼의 값으로 정렬 (ORDER BY 절)

SELECT 문을 사용하여 데이터를 조회하면 테이블에 저장된 순서대로 값을 받아 오지만, ORDER BY 절을 사용하면 지정된 열을 기준으로 정렬을 수행하여 데이터를 받아올 수 있다. 여기에서는 ORDER BY 절을 사용하여 데이터를 정렬하여 조회하는 방법에 대해 설명한다.

ORDER BY 절을 사용하여 정렬하기

SELECT 문을 사용하여 데이터를 조회할 때 ORDER BY 절을 사용하여 지정 컬럼을 기준으로 정렬할 수 있다. 형식은 다음과 같다.

SELECT 컬럼명, ... FROM 테이블명 ORDER BY 컬럼명 [ASC|DESC];

ORDER BY 절 후에 정렬하려는 컬럼명과 오름차순 또는 내림차순을 지정한다. 오름차순인 경우는 ASC, 내림차순인 경우는 DESC를 지정한다. 생략하면 오름차순으로 정렬된다.

그리고 정렬하려는 컬럼을 여러 개를 지정할 수 있다. 이 경우 쉼표(,)로 구분하여 계속해서 작성한다. 여러 컬럼을 지정한 경우에는 먼저 첫 번째 컬럼으로 정렬을 하고, 다음 첫 번째 열에서 같은 값인 경우만 두 번째 컬럼에서 정렬한다. 3개 이상 지정하는 경우도 동일하다.

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 문을 사용하여 테이블에 데이터를 추가한다.

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 컬럼의 값으로 정렬하고 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 컬럼으로 정렬한 결과를 받아왔다.