이번 포스트에서는 정렬을 수행하는 ORDER BY 구문에 대해 알아보겠습니다.
1) 기본적인 ORDER BY
-- NULL을 생략하지 않는 ORDER BY
SELECT *
FROM players
ORDER BY birthYear;
-- 기본적으로 오름차순으로 정렬함
SELECT *
FROM players
WHERE birthYear IS NOT NULL
ORDER BY birthYear;
-- 내림차순으로 정렬
SELECT *
FROM players
WHERE birthYear IS NOT NULL
ORDER BY birthYear DESC;
ORDER BY 구문은 위와 같이 사용할 수 있습니다.
기본적으로 오름차순으로 동작하면서 이를 명시하고 싶다면 ASC를 작성해주고,
내림차순으로 동작하고 싶다면 DESC를 작성해주면 됩니다.
또한 NULL을 따로 걸러내지 않으므로 WHERE 문을 통해 NULL을 따로 걸러줘야 합니다.
실제 실행결과는 다음과 같습니다.
2) 많은 요소에 대해 동시에 ORDER BY
-- 여러 요소에 대해 정렬을 수행
-- 이때 앞에서부터 정렬을 수행하고 요소의 수치가 같다면 다음 요소로 정렬함
SELECT *
FROM players
WHERE birthYear IS NOT NULL
ORDER BY birthYear DESC, birthMonth DESC, birthDay DESC;
ORDER BY는 단일 특성만이 아닌, 여러 특성에도 동시에 적용할 수 있습니다.
이때 적용 기준은 앞에 있는 것을 우선 정렬하고,
만약 그 값이 같다면 뒤에 있는 것으로 정렬하게 됩니다.
쿼리의 실행 결과는 다음과 같습니다.
birthYear이 같은 데이터가 있다면 birthMonth를 비교하고,
bithMonth가 같은 데이터가 있다면 birthDay를 비교하여 내림차순으로 정렬하게 됩니다.
3) 번외
이전에는 탐색할 데이터의 범위를 따로 지정하지 않았습니다.
따라서 이번에는 탐색하는 데이터의 범위를 지정하는 구문을 배워보겠습니다.
-- TOP의 경우 다른 버전의 SQL마다 사용법이 다름
-- 상위 10개의 데이터에 대해 정렬을 수행
SELECT TOP (10) *
FROM players
WHERE birthYear IS NOT NULL
ORDER BY birthYear DESC;
-- 전체의 싱위 1%의 데이터에 대해 정렬을 수행
SELECT TOP (1) PERCENT *
FROM players
WHERE birthYear IS NOT NULL
ORDER BY birthYear DESC;
-- 100번부터 200번까지의 데이터에 대해 정렬을 수행
SELECT *
FROM players
WHERE birthYear IS NOT NULL
ORDER BY birthYear DESC, birthMonth DESC, birthDay DESC
OFFSET 100 ROWS FETCH NEXT 100 ROWS ONLY;
SELECT를 통해 데이터를 가져올 때 TOP 키워드를 통해 상위 데이터를 지정할 수 있습니다.
이때 단순 숫자를 넣어주면 숫자의 값만큼의 상위 데이터를 가져오고
숫자 PERCENT를 넣어주면 숫자 값 퍼센트만큼의 상위 데이터를 가져옵니다.
마지막으로 OFFSET 구문을 통해 가져올 데이터의 범위를 지정할 수 있습니다.
위의 예제에서는 100번째 데이터부터 다음 100개의 데이터를 가져오도록 지정하였습니다.
쿼리의 실행 결과는 다음과 같습니다.
첫 번째 쿼리의 경우, birthYear을 기준으로 내림차순 정렬하여 상위 10개의 데이터를 가져옵니다.
두 번째 쿼리의 경우, birthYear를 기준으로 내림차순 정렬하여 상위 1%개의 데이터를 가져옵니다.
마지막 쿼리의 경우, birthYear를 기준으로 내림차순 정렬한 데이터에서
100번째부터 다음 100번째 데이터(=200번째 데이터)까지의 데이터를 가져옵니다.
'데이터베이스' 카테고리의 다른 글
SQL (6) - 집계 함수 (0) | 2025.02.10 |
---|---|
SQL (5) - CASE (0) | 2025.02.05 |
SQL (4) - DATETIME (0) | 2025.02.05 |
SQL (3) - 산술연산과 문자열 (1) | 2025.02.04 |
SQL (1) - SELECT문 (0) | 2025.02.04 |