• SQL ORDER BY 키워드

    2021. 5. 30.

    by. Jacob Lee

    728x90

     


     

    ORDER BY

    SQL에서는 ORDER BY로 컬럼 값의 기반하여 데이터를 오름차순, 혹은 내림차순으로 정렬할 수 있다.

     

    기본 문법은 다음과 같다.

    SELECT column1, column2
    From table_name
    ORDER BY column1 ASC / DESC;

     

    ORDER BY를 정리하면 다음과 같다.

    • ORDER BY는 쿼리의 마지막에 위치하게 된다.
    • 왜냐면 데이터를 선택하고, 필터링하는 것이 먼저이고, 데이터를 정렬하는 것이 다음 단계이기 때문이다.
    • ASC를 사용하면 오름차순으로, DESC를 사용하면 내림차순으로 정렬된다.
    • ORDER BY 다음에 ASC나 DESC를 빈칸으로 둔다면 ORDER BY는 오름차순을 기본 값으로 사용한다.

     

    ORDER BY 사용하기

    Customer라는 이름을 가진 테이블에서 고객의 이름, 그리고 스토어 id를 가져온다고 가정해보자.

    다음과 같이 여러 컬럼 값을 가지고 오면서 ORDER BY로 원하는 컬럼의 값으로 정렬할 수 있다.

    SELECT store_id, first_name, last_name 
    FROM customer
    ORDER BY store_id ASC;

    앞서 언급했듯이 ORDER BY에 값을 명시해주지 않으면 기본으로 오름차순이 사용되지만 더 나은 가독성을 위해 오름차순을 사용할 경우 ASC라고 명시해주는 것이 더 좋다. 

     

    오름차순이기 때문에 store_id가 1인 데이터부터 순서대로 나열될 것이다.

    하지만 이 안에서도 store_id가 1일 때, 유저의 이름마저 오름차순으로 같이 정렬하고 싶을 수 있다.
    (store_id만으로 정렬한다면 store_id=1, first_name=Zach / store_id=1, first_name=Jacob 이런 식으로 정렬될 수도 있다).

     

    이런 상황일 때 다음과 같이 여러 컬럼의 값을 기반해서 정렬할 수 있다.

    SELECT store_id, first_name, last_name 
    FROM customer
    ORDER BY store_id, first_name ASC;

    위와 같이 ORDER BY를 사용한다면 store_id로 먼저 정렬이 되고 그다음 first_name이 A인 순서부터 정렬된다, 즉, store_id가 1인 것이 우선순위로 먼저 오름차순 정렬되고, 그다음 first_name이 A인 것부터 오름차순 정렬된다.
    (store_id=1, first_name=A...C....E... / store_id=2, first_name=A...C...E...)

     

    사실 ORDER BY를 사용할 때는 오름차순, 내림차순 한 옵션이 아니라 둘 다 사용해서 정렬할 수도 있다.

    SELECT store_id, first_name, last_name 
    FROM customer
    ORDER BY store_id DESC, first_name ASC;

    위와 같이 사용했을 때 store_id는 내림차순으로 정렬이 우선적으로 되며, 그다음 이름을 오름차순으로 정렬한다.

     

    더 나아가서 다음과 같이 정렬은 특정 컬럼을 기반으로 하지만, 그 컬럼을 데이터로 조회하지 않는 방법도 있다.

    SELECT first_name, last_name 
    FROM customer
    ORDER BY store_id DESC, first_name ASC;

    기본 키(primary key) 같은 값은 때때로 굳이 조회하지 않아도 되는 데이터이지만 pk를 기반으로 정렬하고 싶은 상황일 때, 위와 같이 특정 컬럼으로 ORDER BY를 사용해 정렬하면서 데이터를 조회하지 않을 수 있다.

     

    728x90

    'Back-end > SQL' 카테고리의 다른 글

    SQL BETWEEN 연산자  (0) 2021.05.30
    SQL Limit절  (0) 2021.05.30
    SQL SELECT WHERE절  (0) 2021.05.30
    SQL COUNT 함수  (0) 2021.05.29
    SQL SELECT DISTINCT문  (0) 2021.05.29

    댓글