SQL의 ORDER BY 문은 쿼리가 반환하는 레코드의 순서를 결정합니다. 테이블에 있는 어떤 열의 값이든 기준으로 삼아 레코드를 오름차순 또는 내림차순으로 정렬할 수 있습니다.
쿼리 결과를 정렬하면 원하는 레코드를 훨씬 쉽게 찾을 수 있습니다.
예를 들어, '이달의 직원' 상을 가장 많이 받은 직원이 누구인지 알고 싶다고 가정해 보겠습니다. 이 경우 해당 데이터를 기준으로 쿼리를 정렬하면 상을 가장 많이 받은 직원이 맨 앞에 표시되도록 만들 수 있습니다.
SQL의 ORDER BY 문은 지정한 조건에 따라 쿼리 결과의 순서를 정렬합니다. 이 글에서는 ORDER BY 문을 사용하는 방법을 살펴보고, 예제를 통해 이 키워드를 완전히 익힐 수 있도록 안내합니다.
SQL ORDER BY란?
SQL의 ORDER BY 키워드는 쿼리 결과를 정렬하는 데 사용됩니다. 특정 열 하나 또는 여러 개의 열을 기준으로 결과를 오름차순 또는 내림차순으로 정렬할 수 있습니다.
ORDER BY 쿼리의 기본 문법은 다음과 같습니다:
SELECT name
FROM employees
ORDER BY name, joined ASC;
SQL SELECT 문 다음에는 가져오려는 열의 이름을 지정하고, employees 테이블에서 데이터를 조회한다고 명시합니다.
ORDER BY 문은 name과 joined 열을 기준으로 쿼리를 정렬합니다. 데이터베이스는 먼저 이름을 기준으로 오름차순 정렬을 수행합니다.
만약 이름이 같은 사람이 여러 명 있다면, 입사일이 가장 늦은 사람이 동일한 이름을 가진 사람들 중 맨 아래에 표시됩니다.
SQL은 기본적으로 열을 오름차순으로 정렬합니다. SQL ORDER BY 절을 사용하면 원하는 방향으로 정렬 순서를 지정할 수 있습니다.
사용 가능한 두 가지 정렬 방식은 다음과 같습니다:
- ASC: 오름차순 (기본값)
- DESC: 내림차순
열 목록을 활용하면 여러 열을 서로 다른 순서로 정렬할 수도 있습니다:
SELECT name
FROM employees
ORDER BY name ASC, joined DESC;
이 쿼리는 먼저 name 열을 기준으로 오름차순 정렬한 후, joined 열을 기준으로 내림차순 정렬합니다.
ORDER BY 실전 예제
이제 ORDER BY 연산자가 실제로 작동하는 모습을 예제 쿼리를 통해 확인해 보겠습니다. 모든 직원의 이름과 직급 목록을 조회하고, 이 목록을 직원 이름의 알파벳 순서로 정렬하는 것이 목표입니다.
이 데이터를 조회하려면 다음 쿼리를 사용할 수 있습니다:
SELECT name, title FROM employees ORDER BY name ASC;
쿼리가 결과 집합을 정렬합니다. 오름차순으로 정렬된 결과 집합은 다음과 같습니다:
| name | title |
| Alexis | Sales Associate |
| Geoff | Senior Sales Associate |
| Hannah | Sales Associate |
| Jonah | Vice President of Sales |
| Luke | Sales Associate |
| Mike | Sales Associate |
알파벳 역순으로 정렬하고 싶다면 ASC 대신 DESC를 사용하면 됩니다.
여러 열을 기준으로 정렬하는 것도 가능합니다. 테이블에 중복된 값이 있어 추가적인 정렬 기준이 필요할 때 특히 유용합니다.
예를 들어, 직급별로 재직 기간이 가장 짧은 직원부터 확인하고 싶다고 가정해 보겠습니다. 다음 쿼리를 사용하면 됩니다:
SELECT name, title, hired_date FROM employees ORDER BY title, hired_date DESC;
ORDER BY 문이 쿼리 결과를 정렬합니다. 쿼리 실행 결과는 다음과 같습니다:
| name | title | hired_date |
| Emma | Marketing Director | 2010-03-19 |
| Alexis | Sales Associate | 2014-04-01 |
| Hannah | Sales Associate | 2011-09-30 |
| Mike | Sales Associate | 2010-03-19 |
| Luke | Sales Associate | 2009-12-03 |
| Geoff | Senior Sales Associate | 2012-03-17 |
| Jonah | Vice President of Sales | 2010-07-23 |
(7 rows)
위 결과에서 볼 수 있듯이, 테이블은 직원의 직급과 고용 날짜를 기준으로 정렬되었습니다. ORDER BY 문이 성공적으로 레코드를 정렬한 것입니다.
가장 최근에 입사한 영업 사원은 Alexis이며, 회사에서 가장 오래 근무한 영업 사원은 Luke입니다. 또한 각 직원의 입사일을 직급 순서대로 한눈에 확인할 수 있습니다.
마치며
SQL의 ORDER BY 문은 쿼리가 레코드를 반환하는 순서를 변경합니다. 오름차순 또는 내림차순으로 정렬할 수 있으며, 별도로 지정하지 않으면 기본적으로 오름차순으로 정렬됩니다.
SQL에 대해 더 깊이 배우고 싶으신가요? SQL 학습 가이드를 확인해 보세요. SQL을 효과적으로 익히는 핵심 팁과 함께, 필요한 역량을 쌓는 데 도움이 되는 학습 자료 목록을 준비했습니다.