개발새발 블로그
[SQL 첫걸음] 3장 - 정렬 본문
1. 정렬 - ORDER BY
검색 결과의 행 순서를 바꿀 수 있음.
SELECT 열 FROM 테이블 ORDER BY 열명;
이렇게 이름으로 정렬을 해달라는 SELECT * FROM member ORDER BY name;
라고 정렬을 한 결괏값이다.
WHERE 명령어도 함께 쓸 수 있다.
<내림차순 정렬하기>
- DESC : descendant(하강) 의 뜻으로, 내림차순.
- ASC : ascendant(상승)의 뜻으로, 오름차순.
뒤에 별도의 명령어를 지정해주지 않으면 기본적으로 오름차순 정렬을 해주고,
내림차순으로 정렬을 하고 싶다면 뒤에 명령어를 붙여줘야 한다.
SELECT 열 FROM 테이블 ORDER BY 열명 DESC;
문자열은 사전식 순서,
integer 형은 숫자 크기순으로 정렬을 하지만,
문제는 VARCHAR형 안에 숫자를 넣어놓은 상황이다.
사전식으로 정의하면 1다음이 2이기 때문에,
VARCHAR을 정렬하면 1 < 10 < 11 < 20 같은 결과가 나온다.
2. 복수의 열을 지정해 정렬하기
데이터 양이 많을 때는 하나의 열만으로는 행을 특정짓이 어려울 때(같은 값이 들어있는 경우 등) 복수의 열을 지정해서 정렬한다.
a | b |
1 | 1 |
2 | 1 |
2 | 2 |
1 | 3 |
1 | 2 |
INTEGER 형의 이런 테이블이 존재한다.
1-1, 1-2, 1-3, 2-1, 2-2 이렇게 상관관계 맞춰서 정렬하려고 한다.
SELECT 열 FROM 테이블 ORDER BY 열명1, 열명2...;
SELECT * FROM sampledb ORDER BY a,b;
a | b |
1 | 1 |
1 | 2 |
1 | 3 |
2 | 1 |
2 | 2 |
a를 먼저 정렬한 후, b를 정렬한다.
반대로,
SELECT * FROM sampledb ORDER BY b,a;
a | b |
1 | 1 |
2 | 1 |
1 | 2 |
2 | 2 |
1 | 3 |
b를 먼저 정렬한 후, a를 정렬한다.
a는 내림차순, b는 오름차순 그대로 정렬하고 싶다면,
SELECT * FROM sampledb ORDER BY a DESC, b;
NULL 값의 정렬순서는 표준 SQL에도 규정되어 있지 않아 데이터베이스 제품에 따라 기준이 다르다.
My SQL 은 null값을 가장 작은 값으로 취급해서,
ASC(오름차순)에서는 가장 먼저 표시한다.
3. 결과 행 제한하기 - LIMIT
표현하는 최대 행수는 지정한다.
다만, LIMIT 는 표준 SQL 이 아니고 MySQL 과 PodtgreSQL에서만 사용 가능하다.
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수;
<오프셋 지정>
대량의 데이터를 하나의 페이지에 표현하는것은 효율적이지 못하므로,
일반적으로 페이지 나누기 기능을 사용한다.
커뮤니티 사이트에서 밑에 1 2 3 4 다음 이렇게 표시한것이 이 예시이다.
OFFSET을 사용하면 이 페이지 나누기가 가능해진다.
OFFSET은 행을 시작할 초기위치이고, -1을 해서 계산해줘야 한다.
(첫번째 행이 0부터 시작한다.)
SELECT 열명 FROM 테이블명 LIMIT 행수 OFFSET 시작위치;
1부터 쭉 no열로 나열되어있다고 생각해보면,
SELECT * FROM sampledb LIMIT 3 OFFSET 4;
no |
5 |
6 |
7 |
OFFSET이 4이므로 5행부터, LIMIT가 3이므로 3개의 행을 보여준다.
'백 > SQL' 카테고리의 다른 글
[SQL 첫걸음] 3장 - 연산 (1) | 2023.10.01 |
---|---|
[SQL 첫걸음] 1,2장 - 테이블에서 데이터 검색 (0) | 2023.09.23 |