Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

06 ORDER BY 문으로 데이터 정렬하기 본문

MSSQL/SQL 시작하기

06 ORDER BY 문으로 데이터 정렬하기

빌드이너프 2024. 9. 30. 22:10

ORDER BY 문의 기본 형식

SELECT [열] FROM [테이블] WHERE [열] = [조건값]
ORDER BY [열] [ASC, DESC];

ASC: 오름차순 정렬

DESC: 내림차순 정렬

 

우선순위가 영문 또는 한글인 상타에서 같은 쿼리 비교

영어 우선순위

DoItSQL 데이터베이스는 데이터 정렬 속성이 영문이다.

 USE DoItSQL;
 WITH CTE(col_1) AS (
 SELECT N'ABC' UNION ALL
 SELECT N'123' UNION ALL
 SELECT N'가나다'
 )
 SELECt * FROM CTE
 ORDER BY col_1 ASC

 

한글 우선순위

master 시스템 데이터베이스는 한글 속성이다.

USE master;
 WITH CTE(col_1) AS (
 SELECT N'ABC' UNION ALL
 SELECT N'123' UNION ALL
 SELECT N'가나다'
 )
 SELECt * FROM CTE
 ORDER BY col_1 ASC

 

ORDER BY 문으로 열 기준 정렬

데이터를 1개 열 기준으로 정렬할 때는 정렬할 이름을 ORDER BY 문 뒤에 입력한다.

ORDER BY 문을 사용해 1개 열 기준으로 정렬

SELECT * FROM nasdaq_company ORDER BY symbol;

 

SELECT * FROM nasdaq_company ORDER BY company_name;

 

열을 2개 이상 기준으로 정렬

정렬 순서에 따라 쉼표를 사용해 열 이름을 나열한다.

열 입력 순서에 따라 정렬 우선순위가 정해지므로 열 입력 순서에 주의해야 한다.

 

ORDER BY 문을 사용해 2개 열 기준으로 정렬: sector, industry 순

SELECT * FROM nasdaq_company
WHERE sector IS NOT NULL AND sector <> ''
ORDER BY sector, industry;

 

ORDER BY 문을 사용해 2개 열 기준으로 정렬: industry, sector 순

SELECT * FROM nasdaq_company
WHERE sector IS NOT NULL AND sector <> ''
ORDER BY industry, sector;

 

ASC으로 오름차순 정렬

ASC를 정렬하려는 열 이름 뒤에 붙이면 된다

ASC는 정렬 기본값이므로 생략 할 수 있다.

ASC으로 오름차순 정렬

SELECT * FROM nasdaq_company
ORDER BY symbol ASC;

 

DESC로 내림차순 정렬

내림차순 정렬은 정렬하려는 이름 뒤에 DESC를 추가한다.

DESC으로 내림차순 정렬

SELECT * FROM nasdaq_company
ORDER BY symbol DESC;

 

오름차순과 내림차순을 조합해 정렬

각 열 이름 뒤에 ASC, DESC를 붙인 뒤 쉼표로 연결한다.

오름차순과 내림차순을 조합해 정렬

sector 열에서는 오름차순으로 정렬하고, symbol 열에서는 내림차순으로 정렬한다.

입력 순으로 정렬 우선순위가 정해지므로 sector 열에서 같은 값이 있는 경우 symbol 열에서 정렬한다.

SELECT * FROM nasdaq_company
WHERE sector IS NOT NULL AND sector <> ''
ORDER BY sector ASC, symbol DESC;

 

TOP으로 상위 N개 데이터 검색

특정 조건에 해당하는 데이터 중 상위 N개의 데이터만 보고 싶다면 SELECT 문에 TOP을 조합한다.

TOP의 경우 상위 N개를 반환하므로 정렬 우선순위가 중요하다.

ipo_year에서는 내림차순, symbol에서는 오름차순 정렬 후 상위 10개의 데이터 검색

SELECT TOP 10 * FROM nasdaq_company
ORDER BY ipo_year DESC, symbol ASC;

상위 N개의 데이터를 검색할 때 반드시 ORDER BY 문을 사용하는 것이 좋다.

정렬하지 않으면 어떤 값을 기준으로 정렬한 상위 N개의 데이터가 출력되었는지 알 수 없기 때문이다.

 

OFFSET...FETCH NEXT로 지정한 개수만큼 행 건너뛰고 검색하기

ORDER BY로 데이터를 정렬한 다음, 상위나 하위가 아닌 특정 구간의 데이터를 검색해야 하는 경우가 있다.

예를 들어 '최근에 작성한 글이 1페이지에 나타나야 하는데 2페이지 혹은 3페이지에 있는 데이터를 보고 싶은 경우'이다.

이럴 때 OFFSET...FETCH NEXT를 사용한다.

 

OFFSET

: 검색 결과에서 지정한 행 개수만큼 건너뛰고 출력한다.

symbol을 기준으로 정렬한 다음 1000개의 데이터를 건너뛰고 1001번째 데이터부터 출력하는 쿼리

SELECT * FROM nasdaq_company
ORDER BY symbol
OFFSET 1000 ROWS;

 

OFFSET 사용하지 않은 쿼리 1번째 부터 출력

SELECT * FROM nasdaq_company
ORDER BY symbol;

 

FETCH NEXT

: 반드시 OFFSET과 함께 사용해야 하며, 출력할 행의 개수를 지정할 수 있다.

예를 들면 '게시판에서 한 페이지에 10개만 보여주는 기능'과 같다.

 

1001번째 데이터부터 10개의 데이터를 출력하는 쿼리

SELECt * FROM nasdaq_company
ORDER BY symbol
OFFSET 1000 ROWS
FETCH NEXT 10 ROWS ONLY;