반응형

SELECT - ORDER BY 정렬

 

SELECT는 SQL에서 가장 일반적으로 사용되는 구문으로, 데이터베이스에서 데이터를 검색해서 가져오는데 사용되며 아주 기초가 되면서 가장 많이 사용한다.

기본적인 사용 구문은 다음과 같다.

  • SELECT 컬럼명 1, 컬럼명 2, ..., 컬럼명 n
    FROM 테이블명
    (WHERE 조건식)

만약 전체 컬럼에 대해서 조회를 하고 싶으면 컬럼명 대신 *(asterisk)을 입력하면 된다.

 

SELECT * FROM STUDENT;

즉, 위 구문은 STUDENT라는 학생 테이블의 모든 컬럼에 대해 데이터를 조회하는 것이다.

 

그렇다면, 이제 어떤 기준에 대해서 조회가 끝난 데이터를 정렬하고 싶지 않은가?

정렬은 구문의 마지막 부분에 ORDER BY 기준 컬럼1 (ASC or DESC), 기준 컬럼 2 (ASC or DESC), ...을 입력하면 된다.

여기서 ASC는 오름차순이고 DESC는 내림차순을 뜻한다. default 값은 ASC로 되어 있어서 오름차순으로 정렬할 경우 생략이 가능하지만 내림차순으로 정렬을 원한다면 반드시 DESC를 명시해 주어야 한다.

 

프로그래머스의 기초 문제인 '인기있는 아이스크림' 문제를 통해 실습을 해 보자.

프로그래머스 - 인기있는 아이스크림(https://school.programmers.co.kr/learn/courses/30/lessons/133024)

문제 설명을 읽어보면 테이블명은 FIRST_HALF라는 것을 알 수 있으며 각 컬럼명은 SHIPMENT_ID, FLAVOR, TOTAL_ORDER 임을 확인할 수 있다.

이제 문제는 아이스크림의 맛(FLAVOR) 컬럼의 데이터들을 조회하여야 하는데 정렬을 해야 한다는 조건이 붙었다.

총주문량(TOTAL_ORDER)을 기준으로 내림차순으로 정렬을 하여야 한다는 조건과 만약 주문량이 같다면 출하 번호(SHIPMENT_ID)를 기준으로 오름차순으로 정렬을 하여야 한다는 조건이다.

 

아직 SQL 구문이 적응이 되지 않았을 수 있으므로 쉬운 구문으로 쪼개서 문제를 정복해 보자.

먼저, FLAVOR 컬럼의 데이터를 조회해 보자.

SELECT 컬럼 이름 FROM 테이블명 기억하는가?

위 구문을 외우고 있다면 그대로 구문을 완성 시켜주면 해결할 수 있다.

  • SELECT FLAVOR FROM FIRST_HALF

 

자, 이제 나머지 정렬 조건을 위 구문의 가장 끝에 추가하면 된다.

ORDER BY TOTAL_ORDER DESC,

SHIPMENT_ID

 

또는 (ASC[오름차순]을 생략하지 않으려면,)

 

ORDER BY TOTAL_ORDER DESC,

SHIPMENT_ID ASC

을 추가하면 된다.