주문 방법: MySQL오름차순 및 내림차순 쿼리 예시
⚡ 스마트 요약
주문 방법: MySQL `ASC` 및 `DESC` 키워드를 사용하여 쿼리 결과 집합을 오름차순 또는 내림차순으로 정렬합니다. 아래 섹션에서는 구문, 단일 열 및 다중 열 정렬, NULL 값 처리 방법, 그리고 myflixdb 샘플 데이터베이스를 사용한 실행 예제를 설명합니다.

ORDER BY 란 무엇입니까? MySQL?
MySQL 주문 `--align` 절은 SELECT 쿼리와 함께 사용하여 데이터를 순서대로 정렬하는 데 사용됩니다. MySQL ORDER BY 절은 쿼리 결과 집합을 오름차순 또는 내림차순으로 정렬하며, 단일 열 또는 여러 열을 동시에 기준으로 정렬할 수 있습니다.
SELECT 명령을 단독으로 사용하면 스토리지 엔진이 데이터를 읽은 순서대로 행이 반환되는데, 이는 보장된 순서가 아닙니다. 정렬은 이러한 행들을 지정된 순서대로 재배열하는 작업입니다. 정렬은 숫자, 문자열, 날짜 데이터 유형 모두에 적용할 수 있습니다.
MySQL ORDER BY 구문
예제를 살펴보기 전에, 해당 절이 전체 SELECT 문 내에서 어디에 위치하는지 알아보는 것이 도움이 됩니다.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
여기를 클릭하십시오.
- "SELECT 문... " 일반적인 선택 쿼리입니다.
- " | " 대안을 나타냅니다.
- “[조건이 있는 경우 | 조건별로 `field_name(s)` 그룹화]” 이는 쿼리 결과 집합을 필터링하는 데 사용되는 선택적 조건입니다.
- "주문" 쿼리 결과 집합을 정렬합니다.
- “[ASC | 설명]” `--align`은 결과 집합을 오름차순 또는 내림차순으로 정렬하는 데 사용되는 키워드입니다. 참고로, ASC 기본값입니다.
DESC 및 ASC 키워드는 무엇입니까?
ORDER BY 절은 ASC와 DESC 두 가지 정렬 방향을 지원합니다. 아래 표는 가장 자주 정렬하는 데이터 유형에 대해 두 정렬 방향을 비교합니다.
ASC는 오름차순의 약어입니다. |
MySQL DESC는 내림차순의 약어입니다. |
|---|---|
| 쿼리 결과를 위에서 아래로 정렬하는 데 사용됩니다. | 이 기능은 검색 결과를 아래에서 위로 정렬하는 데 사용됩니다. |
| 날짜 데이터 유형을 작업할 때 가장 빠른 날짜가 목록 상단에 표시됩니다. | 날짜 데이터 유형을 다룰 때는 가장 최근 날짜가 목록의 맨 위에 표시됩니다. |
| 숫자 데이터 유형으로 작업할 때 가장 낮은 값이 목록 상단에 표시됩니다. | 숫자형 데이터 형식을 사용할 때는 가장 높은 값이 쿼리 결과 집합의 맨 위에 표시됩니다. |
| 문자열 데이터 유형으로 작업할 때 쿼리 결과 집합은 문자 A로 시작하여 문자 Z까지 정렬됩니다. | 문자열 데이터 유형으로 작업할 때 쿼리 결과 집합은 문자 Z로 시작하는 항목부터 문자 A까지 정렬됩니다. |
SQL DESC 및 ASC 키워드는 모두 SELECT 문과 함께 사용됩니다. MySQL ORDER BY 절.
DESC 및 ASC 구문
SQL DESC 정렬 키워드의 기본 구문은 다음과 같습니다.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
여기를 클릭하십시오.
- SELECT {필드 이름 | *} 테이블 이름에서 결과 집합을 가져올 필드와 테이블을 포함하는 문장입니다.
- [WHERE 조건] 선택 사항이지만 주어진 조건에 따라 데이터를 필터링하는 데 사용할 수 있습니다.
- 필드 이름 기준으로 정렬 필수 항목이며 정렬을 수행할 필드의 이름을 지정합니다. MySQL DESC 키워드는 내림차순으로 정렬함을 지정합니다.
- [제한 N] 이 옵션은 선택 사항이지만, 쿼리 결과 집합에서 반환되는 행 수를 제한하는 데 사용할 수 있습니다.
DESC와 ASC를 사용하는 이유는 무엇일까요? MySQL?
구문을 아는 것만으로는 충분하지 않습니다. ORDER BY 절이 존재하는 이유는 데이터베이스가 생성하기 쉬운 결과 집합이 사람이 읽기에는 항상 쉬운 것은 아니기 때문입니다.
예를 들어, 비디오 대여점 회원의 결제 내역을 출력하여 안내 데스크 직원이 문의에 신속하게 답변할 수 있도록 한다고 가정해 보겠습니다. 이때 가장 최근 결제부터 가장 오래된 결제 순으로 내림차순 정렬하는 것이 훨씬 효율적입니다. SQL의 `DESC` 키워드를 사용하면 결제일을 기준으로 목록을 정렬할 수 있으므로 이러한 상황에서 매우 유용합니다.
마케팅 부서에서 회원들이 대여 전에 라이브러리에 어떤 영화가 있는지 확인할 수 있도록 카테고리별 영화 목록을 원한다고 가정해 보겠습니다. 카테고리 이름과 영화 제목을 오름차순으로 정렬하면 회원들은 색인에서처럼 정보를 빠르게 찾을 수 있습니다. ASC 키워드가 바로 이러한 목적으로 사용됩니다.
요약하자면, ORDER BY 절은 원시 결과 집합을 보고서 형태로 변환합니다. 선택하는 키워드는 독자가 묻는 질문에 따라 달라집니다. 가장 최근에 일어난 일 DESC를 요청하는 동안 이 물건은 어디서 찾을 수 있나요? ASC를 요구합니다.
MySQL 정렬 기준 예시
다음 예제들은 모두 myflixdb 샘플 데이터베이스를 대상으로 실행됩니다. 먼저 정렬되지 않은 members 테이블부터 살펴보겠습니다. 이 테이블은 기본 순서로 반환됩니다.
SELECT * FROM members;
위 스크립트를 실행하면 MySQL Workbench를 사용하여 myflixdb를 테스트한 결과는 아래와 같습니다.
| 회원_번호 | 전체 이름 | 성별 | 생일 | 물리적_주소 | 우편 주소 | 연락처 | 이메일 |
|---|---|---|---|---|---|---|---|
| 1 | 자넷 존스 | 여성 | 21-07-1980 | 첫 번째 거리 플롯 번호 4 | 전용 가방 | + 0759 253 542 | janetjones@yagoo.cm |
| 2 | 자넷 스미스 존스 | 여성 | 23-06-1980 | 멜로즈 123 | NULL | NULL | jj@fstreet.com |
| 3 | 로버트 필 | 남성 | 12-07-1989 | 3번가 34 | NULL | 12345 | rm@tstreet.com |
| 4 | 글로리아 윌리엄스 | 여성 | 14-02-1984 | 2번가 23 | NULL | NULL | NULL |
| 5 | 레너드 호프스타터 | 남성 | NULL | 우드크레스트 | NULL | 845738767 | NULL |
| 6 | 셀던 쿠퍼 | 남성 | NULL | 우드크레스트 | NULL | 976736763 | NULL |
| 7 | 라제시 쿠트라팔리 | 남성 | NULL | 우드크레스트 | NULL | 938867763 | NULL |
| 8 | 레슬리 윙클 | 남성 | 14-02-1984 | 우드크레스트 | NULL | 987636553 | NULL |
| 9 | 하워드 왈로위츠 | 남성 | 24-08-1981 | 남쪽 공원 | P.O. Box 4563 | 987786553 | NULL |
DESC를 사용하여 내림차순으로 정렬
마케팅 부서에서 구성원 정보를 생년월일 순으로 내림차순 정렬하고 싶어한다고 가정해 보겠습니다. 이렇게 하면 팀에서 생일 축하 메시지를 적시에 보낼 수 있습니다. 아래 쿼리를 실행하면 해당 목록이 생성됩니다.
SELECT * FROM members ORDER BY date_of_birth DESC;
위 스크립트를 실행하면 MySQL Workbench를 사용하여 myflixdb를 테스트한 결과는 아래와 같습니다.
ASC를 사용하여 오름차순으로 정렬
동일한 쿼리를 오름차순으로 정렬하면 키워드만 바뀝니다.
SELECT * FROM members ORDER BY date_of_birth ASC;
참고 : NULL은 값이 전혀 없음을 의미하며, 이는 0이나 빈 문자열과는 다릅니다. 두 스크린샷에서 NULL 날짜들이 어떻게 그룹화되는지 확인해 보세요. MySQL NULL 값을 다른 모든 값보다 낮은 값으로 취급하므로, NULL 값이 있는 행은 오름차순으로 정렬했을 때 가장 먼저 나타나고 내림차순으로 정렬했을 때는 가장 나중에 나타납니다.
여러 열을 기준으로 정렬하는 방법 MySQL
단일 열을 기준으로 정렬하면 간단한 질문에 대한 답을 얻을 수 있습니다. 보고서에는 일반적으로 두 번째 수준의 정렬이 필요하며, ORDER BY 절은 바로 그러한 목적으로 쉼표로 구분된 필드 목록을 사용할 수 있도록 지원합니다.
다음은 명시적인 지시 없이 모든 회원 레코드를 나열하는 SQL 정렬 스크립트입니다.
SELECT * FROM `members`;
위 스크립트를 실행하면 아래에 표시된 결과가 나타납니다.
| 회원_번호 | 전체 이름 | 성별 | 생일 | 물리적_주소 | 우편 주소 | 연락처 | 이메일 |
|---|---|---|---|---|---|---|---|
| 1 | 자넷 존스 | 여성 | 21-07-1980 | 첫 번째 거리 플롯 번호 4 | 전용 가방 | + 0759 253 542 | janetjones@yagoo.cm |
| 2 | 자넷 스미스 존스 | 여성 | 23-06-1980 | 멜로즈 123 | NULL | NULL | jj@fstreet.com |
| 3 | 로버트 필 | 남성 | 12-07-1989 | 3번가 34 | NULL | 12345 | rm@tstreet.com |
| 4 | 글로리아 윌리엄스 | 여성 | 14-02-1984 | 2번가 23 | NULL | NULL | NULL |
| 5 | 레너드 호프스타터 | 남성 | NULL | 우드크레스트 | NULL | 845738767 | NULL |
| 6 | 셀던 쿠퍼 | 남성 | NULL | 우드크레스트 | NULL | 976736763 | NULL |
| 7 | 라제시 쿠트라팔리 | 남성 | NULL | 우드크레스트 | NULL | 938867763 | NULL |
| 8 | 레슬리 윙클 | 남성 | 14-02-1984 | 우드크레스트 | NULL | 987636553 | NULL |
| 9 | 하워드 왈로위츠 | 남성 | 24-08-1981 | 남쪽 공원 | P.O. Box 4563 | 987786553 | NULL |
기본 순서로 단일 열 정렬
성별 필드를 기준으로 쿼리 결과 집합을 정렬한 목록을 원한다고 가정해 보겠습니다. 아래 스크립트는 방향을 지정하지 않고도 이를 수행합니다.
SELECT * FROM `members` ORDER BY `gender`;
| 회원_번호 | 전체 이름 | 성별 | 생일 | 물리적_주소 | 우편 주소 | 연락처 | 이메일 |
|---|---|---|---|---|---|---|---|
| 1 | 자넷 존스 | 여성 | 21-07-1980 | 첫 번째 거리 플롯 번호 4 | 전용 가방 | + 0759 253 542 | janetjones@yagoo.cm |
| 2 | 자넷 스미스 존스 | 여성 | 23-06-1980 | 멜로즈 123 | NULL | NULL | jj@fstreet.com |
| 4 | 글로리아 윌리엄스 | 여성 | 14-02-1984 | 2번가 23 | NULL | NULL | NULL |
| 3 | 로버트 필 | 남성 | 12-07-1989 | 3번가 34 | NULL | 12345 | rm@tstreet.com |
| 5 | 레너드 호프스타터 | 남성 | NULL | 우드크레스트 | NULL | 845738767 | NULL |
| 6 | 셀던 쿠퍼 | 남성 | NULL | 우드크레스트 | NULL | 976736763 | NULL |
| 7 | 라제시 쿠트라팔리 | 남성 | NULL | 우드크레스트 | NULL | 938867763 | NULL |
| 8 | 레슬리 윙클 | 남성 | 14-02-1984 | 우드크레스트 | NULL | 987636553 | NULL |
| 9 | 하워드 왈로위츠 | 남성 | 24-08-1981 | 남쪽 공원 | P.O. Box 4563 | 987786553 | NULL |
여성 회원이 먼저 표시되고 그 다음에 남성 회원이 표시됩니다. 이는 ORDER BY 절을 사용할 때 오름차순 또는 내림차순을 지정하지 않으면 다음과 같은 이유 때문입니다. MySQL DESC 키워드, MySQL 기본적으로 쿼리 결과 집합을 오름차순으로 정렬합니다.
두 열을 서로 반대 방향으로 정렬하기
이제 그 동작을 보여주는 예제를 살펴보겠습니다. 두 개의 열을 사용하여 정렬첫 번째 열은 다음과 같습니다. 분류 in 오름차순 기본적으로 두 번째 열은 다음과 같습니다. 분류 in 내림차순.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
위 스크립트를 실행하면 MySQL Workbench를 사용하여 myflixdb를 실행한 결과는 다음과 같습니다.
성별 열은 기본적으로 오름차순으로 정렬되어 있으며, 생년월일 열은 명시적으로 내림차순으로 정렬됩니다. 각 방향 키워드는 해당 키워드가 뒤따르는 열에만 적용됩니다.
ORDER BY 절과 WHERE 절, LIMIT 절, GROUP BY 절을 함께 사용하는 방법
ORDER BY 절은 실제 운영 환경에서 쿼리에 단독으로 사용되는 경우는 드뭅니다. MySQL 항상 고정된 순서대로 절을 평가하며, 그 순서를 알면 결과가 왜 그렇게 나오는지 이해할 수 있습니다.
- FROM 테이블에서 행을 읽어옵니다.
- Neocity 조건을 만족하지 못하는 행을 버립니다.
- GROUP BY 남아있는 행들을 그룹으로 묶고, HAVING으로 해당 그룹들을 필터링합니다.
- 주문 나머지 행에 관계없이 시퀀스입니다.
- 제한 정렬된 목록에서 요청된 행 수만큼을 잘라냅니다.
ORDER BY 절은 WHERE 절과 GROUP BY 절 다음에 실행되지만 LIMIT 절 앞에 실행되므로 "우드크레스트에서 가장 어린 다섯 명의 구성원"과 같은 쿼리는 하나의 문장으로 표현됩니다.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
그룹화된 결과에도 동일한 순서가 적용됩니다. 집계 값은 다음과 같이 생성됩니다. 집계 함수 예를 들어, 개수(COUNT)를 기준으로 정렬할 수 있으므로 가장 사용량이 많은 카테고리가 보고서 상단에 표시됩니다.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Tip ORDER BY 절은 열 별칭, 표현식 또는 ORDER BY 3과 같이 열 위치를 기준으로 정렬할 수 있습니다. 위치를 기준으로 정렬하는 것은 불안정합니다. SELECT 목록에 새 열을 추가하면 정렬 키가 자동으로 변경되기 때문입니다. 따라서 열 이름을 지정하는 것이 좋습니다.
성능 측면에서 기억해 둘 만한 사항이 하나 있습니다. 정렬된 열에 인덱스가 있는 경우, MySQL 인덱스 순서대로 행을 읽어 정렬 과정을 완전히 건너뛸 수 있습니다. 인덱스가 없으면 대규모 테이블의 경우 메모리 또는 디스크에서 파일 정렬을 수행해야 하므로 보고서 쿼리 속도가 느려지는 것이 일반적입니다.

ASC는 오름차순의 약어입니다.
MySQL DESC는 내림차순의 약어입니다.

