Chap 4. SQL 정렬 및 결과 행 출력

Date:     Updated:

카테고리:

태그:

정렬

SELECT 명령에 ORDER BY 구를 지정하면 출력 결과의 행 순서를 정렬할 수 있다. 이때 DB 내부에 저장된 순서에는 영향이 미치지 않고 오직 출력 결과의 순서에 영향을 미친다.

ORDER BY 정렬

SELECT [열이름] FROM [테이블명] (WHERE [조건식]) ORDER BY [열이름];

기본식이다. ORDER BY 구에 정렬의 기준이 되는 열을 입력하면 기본적으로 오름차순으로 출력이된다.

ORDER BY 내림차순 정렬

SELECT ~~ (중략) ~~ ORDER BY [열이름] DESC;

기본적으로 ASC이 입력되어 있지만 내림차순 정렬을 원한다면 DESC를 열이름 뒤에 입력한다.

대소관계

수치형 데이터는 오름차순, 내림차순 정렬을 이해하기 간단하다. 숫자가 커질지는 순서로 ‘오름차순’, 높은 수에서 낮은 수로 정렬되는 ‘내림차순’.

문자열형 데이터는 우리가 아는 알파벳 순서, 한글 자모음 배열 순서로 오름차순이다. 즉, 사전식 순서게 의해 결정된다.

⭐이때 중요한건 우리 눈으로는 수치형으로 보일 수 있지만! 사실은 문자열형일때 정렬이 사전식으로 된다는 것이다. 숫자가 문자열형일 땐 (1, 10, 11, 2, 20, 3) 이런 식으로 정렬이 된다.

복수 열 기준 정렬하기.

SELECT [열이름] FROM [테이블명] (WHERE [조건식]) 
ORDER BY [열이름1] ASC, [열이름2] DESC;

원하는 출력값을 위해 정렬을 쓰지만 하나의 열 기준에 동일 값이 존재할 수도 있기 때문에 보통 복수의 열 기준을 사용한다. 첫 정렬 기준에서 동일 값들 기준으로 두번째 정렬, 그 이상의 정렬을 하기 위한 식이 위의 식이다.

이때 위와 같이 열 기준마다 오름차순, 내림차순을 설정할 수 있다. 그리고 열 기준은 앞에 쓴 것 부터 우선 순위로 정렬된다.

NULL 값의 정렬 순서

NULL은 데이터가 없음 상태이므로 대소비교를 할 수 없다.
따라서 NULL값은 모든 행에서 가장 먼저 표시되거나 가장 뒤에 표시된다. 

MySQL의 경우 NULL값은 가장 작은 값으로 취급해 ASC에서 가장 먼저 표시된다. 

LIMIT 결과 행 출력 수 조절

SELECT [열명] FROM [테이블명] LIMIT 행수 (OFFSET 시작행 번호);

LIMIT 구는 표준 SQL은 아니고 MySQL과 PostgreSQL에서만 사용할 수 있는 문법이다.

우리는 DB의 모든 행을 확인하는데 한계가 있다. 의식적 한계 혹은 모니터의 한계 등으로. 따라서 적당히 필요한 행만 출력할 수 있도록 LIMIT을 건다고 보면 된다.

상위 몇 개 출력!

내가 원하는 데이터들에서 상위 5개만 보고싶다면 아래와 같이!

SELECT ~ FROM ~ LIMIT 5;

이렇게 하면 된다. 유념해야할 것은 조건문을 통해 딱 5개만 추려질 수 있게 하는 것과는 다른 것이다. WHERE 조건문을 사용하면 전체 출력값이 딱 5개 인것이고 LIMIT 구는 수 십,백개의 행 중에 5개만 표시되는 것이다.

ORACLE, SQL SERVER 등 여러가지 RDBMS는 각기 다른 결과 행 제한 구문이 있으니 필요할 때 찾아보자.

중간부터 몇 개 출력!

만일 6번째 행 부터 10번째 행까지 보고싶다면 아래와 같이!

SELECT ~ FROM ~ LIMIT 5 OFFSET 5;

OFFSET은 시작 위치를 지정해주는 구문이다. 생략이 가능하고 생략한다면 기본값은 0이다. 위치가 0이라는건 Python과 같이 컴퓨터 자료구조 배열을 생각하면 된다. 때문에 6번째 시작이면 OFFSET 5가 맞다.

SQL 카테고리 내 다른 글 보러가기

댓글 남기기