Introduction
SELECT를 통해서 가져온 데이터에 순서가 필요할 경우, ORDER BY 를 사용 해서 정렬시켜 가져 올 수 있는데, 이번 장에서 이를 설명한다.
Content
SELECT 문을 사용하여 데이터를 가져 올 때, 정렬된 상태로 가져 오기 위해선 ORDER BY 절을 사용 한다.
어떻게 ORDER BY 를 사용 하는가?
ORDER BY 절은 어떤 열로 정렬을 할 것인지 정해주어야만 한다.
예) SELECT prod_name FROM Products ORDER BY prod_name;
이 때 주의 해야 할 것이 있는가?
ORDER BY 절은 SELECT 절에서 제일 마지막에 위치해야 하며, ORDER BY 사용시 SELECT 절에서 가져올 데이터로만 정렬하지는 않는다. 가져오지 않는 데이터로 정렬하여 가져 올 수 있다.
그렇다면, 여러 열을 어떻게 정렬 하는가?
ORDER BY 절 뒤에 열 이름을 콤마(,)로 구분 하면 된다. 예를 들어, 생산자 테이블에서, 생산자 이름으로 정렬을 하고, 물품의 가격으로 정렬을 하고자 한다면, 다음과 같다.
예) SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name;
여기서 주의 해야 할 점이 있는가?
정렬 시키는 열의 기입 순서에 따라서, 결과가 다르게 나올 수 있다. 이는 각 열을 정렬 할 때, 어떤 열을 먼저 정렬하는야로 결정 된다. 즉, ORDER BY prod_price, prod_name 과 ORDER BY prod_name, prod_price 는 다른 결과를 낸다.
규칙은 ORDER BY 절 순으로 먼저 정렬을 하는 것이다. 바로 위의 그림에서 처럼 가격부터 정렬하고, 같은 가격이 있다면, 이름으로 다시 정렬 시키는 것이다.
여기서 Tip으로 한가지 더 소개 할 수 있는데 위에서 계속 반복되는 열 이름이 귀찮을 것이다. 이때 ORDER BY 뒤에 숫자로 표시해도 된다. 이 숫자는 SELECT 뒤에 기입된 열 위치이다.
예) SELECT prod_id, prod_price, prod_name FROM Products ORDER BY 2, 3;
단점이 있다면, SELECT 열에 기입되지 않은 열로 정렬 하려고 할 땐, 불가능하다. 왜냐하면, 상대 위치를 알 수 없기 때문이다.
정렬 방향을 지정 할 수 있는가?
가격을 낮은 순으로 정렬했는데 높은 순으로 정렬 한다든지, 문자를 높은 순으로 정렬 한다든지 정렬 할 수 있는가?. 물론 가능하다. 기본적으로 낮은 순 정렬(올림차순)이다. 이를 높은 순 정렬로 바꾸고 싶다면 ORDER BY 열 다음에 DESC를 기입하면 된다.
예) SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC;
여기서 잠깐,
오름차 순 정렬, 내림차 순 정렬 이 구분이 가지 않는 경우가 종종 있다. 오름차순은 낮은 것에서 높은것 순을 말하며, 내림차 순 정렬은 높은 것에서 낮은 것 순을 뜻한다. 나는 햇갈려서 낮은 순, 높은 순 이라고 표현하며, 낮은 것 부터는 낮은 순, 높은 것 부터는 높은 순이라고 한다. 숫자는 그냥 알 수 있으나, 문자의 경우 A 가 낮고 Z가 높다.
여러 열을 낮은 순 정렬과 높은 순 정렬로 정렬 할 수 있는가?
가능하다, 기본적으로 낮은 순 정렬이기 때문에 높은 순으로 정렬 할 열 이름 뒤에 DESC를 일일이 추가해 주면 된다. 물론 이때도 콤마(,)로 구분한다.
예) SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC, prod_name;
주의 해야 할 점은 없는가?
영문의 경우 대소문자란 개념이 있기 때문에 대소문자로 정렬하려고 시도 할 수 있을 것이다. 하지만 기본적으론 대소문자까지 포함하여 정렬 할 수 없다. 왜냐하면 사전식 정렬이기 때문이다. 꼭 대소문자까지 포함하여 정렬하고 싶다면, 관련 DB문서를 보며, 설정해 주어야 한다.
Digression
난 내림차순, 올림차순이 너무 햇갈린다. 그래서 낮은 순, 높은 순, 이라고 한다.
'책 정리 > 하루 10분씩 핵심만 골라 마스터하는 SQL' 카테고리의 다른 글
10장, 데이터 그룹화 : 테이터를 그룹화 한다는 것은 무슨 뜻인가? : GROUP BY (0) | 2010.01.30 |
---|---|
9장, 데이터 요약 : 테이블을 요약하는 방법 : COUNT(*) (0) | 2010.01.30 |
8장, 데이터 조작 함수 사용하기 : SQL에서 함수를 이용하기 (0) | 2010.01.29 |
7장, 계산 필드 만들기 : AS (0) | 2010.01.28 |
6장, 와일드카드를 사용한 필터링 : 문자열 패턴으로 필터링 하기 (0) | 2010.01.28 |
5장, 고급 데이터 필터링 : WHERE 조합법 (0) | 2010.01.28 |
4장, 데이터 필터링 : WHERE 사용 법 (0) | 2010.01.22 |
2장, 데이터 가져오기 : 가장 쉬운 SELECT 사용법 (0) | 2010.01.22 |
1장, SQL의 이해 (0) | 2010.01.22 |
하루에 10분씩 핵심만 골라 마스터하는 SQL (0) | 2010.01.16 |
최근댓글