주문 방법: MySQL오름차순 및 내림차순 쿼리 예시

⚡ 스마트 요약

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

  • 🔠 기본 동작: ORDER BY 절은 ASC나 DESC가 지정되지 않은 경우 오름차순으로 정렬하므로 대부분의 문에서 ASC는 선택 사항입니다.
  • ASC 키워드: ASC는 숫자는 작은 순서부터 큰 순서로, 문자열은 A부터 Z까지, 날짜는 가장 오래된 순서부터 가장 최근 순서로 정렬합니다.
  • ⬇️ 설명 키워드: DESC는 해당 순서를 반대로 바꾸므로 최근 결제 내역이 먼저 표시되거나 생년월일이 감소하는 목록에 적합합니다.
  • 🧮 다중 열 정렬: 열 순서가 중요합니다. ORDER BY gender, date_of_birth DESC는 각 그룹 내에서 성별을 오름차순으로 먼저 정렬한 다음 생년월일을 내림차순으로 정렬합니다.
  • 🔎 절 조합: WHERE 절은 행을 필터링하고, GROUP BY 절은 결과를 집계하며, ORDER BY 절은 결과를 순서대로 정렬하고, LIMIT 절은 결과를 다듬습니다.
  • ⚙️ 성능 계수: 정렬된 열에 인덱스를 사용하면 MySQL 대용량 테이블에서 파일 정렬 작업을 피하기 위해서입니다.

주문 방법: MySQL

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 두 가지 정렬 방향을 지원합니다. 아래 표는 가장 자주 정렬하는 데이터 유형에 대해 두 정렬 방향을 비교합니다.

DESC 및 ASC 키워드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를 테스트한 결과는 아래와 같습니다.

MySQL 내림차순 정렬 쿼리 결과

ASC를 사용하여 오름차순으로 정렬

동일한 쿼리를 오름차순으로 정렬하면 키워드만 바뀝니다.

SELECT * FROM members ORDER BY date_of_birth ASC;

MySQL 오름차순 정렬 쿼리 결과

참고 : 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를 실행한 결과는 다음과 같습니다.

MySQL 두 열을 기준으로 정렬하는 예시

성별 열은 기본적으로 오름차순으로 정렬되어 있으며, 생년월일 열은 명시적으로 내림차순으로 정렬됩니다. 각 방향 키워드는 해당 키워드가 뒤따르는 열에만 적용됩니다.

ORDER BY 절과 WHERE 절, LIMIT 절, GROUP BY 절을 함께 사용하는 방법

ORDER BY 절은 실제 운영 환경에서 쿼리에 단독으로 사용되는 경우는 드뭅니다. MySQL 항상 고정된 순서대로 절을 평가하며, 그 순서를 알면 결과가 왜 그렇게 나오는지 이해할 수 있습니다.

  1. FROM 테이블에서 행을 읽어옵니다.
  2. Neocity 조건을 만족하지 못하는 행을 버립니다.
  3. GROUP BY 남아있는 행들을 그룹으로 묶고, HAVING으로 해당 그룹들을 필터링합니다.
  4. 주문 나머지 행에 관계없이 시퀀스입니다.
  5. 제한 정렬된 목록에서 요청된 행 수만큼을 잘라냅니다.

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 인덱스 순서대로 행을 읽어 정렬 과정을 완전히 건너뛸 수 있습니다. 인덱스가 없으면 대규모 테이블의 경우 메모리 또는 디스크에서 파일 정렬을 수행해야 하므로 보고서 쿼리 속도가 느려지는 것이 일반적입니다.

자주 묻는 질문

가능합니다. 정렬된 열에 인덱스가 없으면, MySQL 전체 결과 집합에 대해 파일 정렬을 수행합니다. ORDER BY 열 및 방향과 일치하는 인덱스를 추가하면 서버가 행을 순서대로 읽고 해당 단계를 건너뛸 수 있습니다.

일반적으로는 그렇지 않습니다. utf8mb4_0900_ai_ci와 같은 기본 정렬 방식은 대소문자를 구분하지 않으므로 "apple"과 "Apple"이 함께 정렬됩니다. 바이너리 또는 _cs 정렬 방식이나 ORDER BY BINARY column_name을 사용하면 대소문자를 구분하여 대문자가 먼저 오도록 정렬됩니다.

네. ORDER BY RAND()는 결과 집합을 섞어주기 때문에 무작위로 영화나 멤버를 선택할 때 유용합니다. 정렬하기 전에 각 행의 점수를 매기므로 LIMIT 절과 함께 사용하고, 매우 큰 테이블에서는 사용을 피하는 것이 좋습니다.

예. AI 도우미는 다음과 같은 도구에 내장되어 있습니다. MySQL 워크 벤치 일반 언어로 작성된 요청을 ORDER BY 절을 사용하는 SELECT 문으로 변환하세요. 생성된 정렬 열과 방향을 항상 검토해야 합니다. AI는 보고서에 어떤 정렬 순서가 필요한지 알 수 없기 때문입니다.

부분적으로는 가능합니다. AI 기반 어드바이저는 느린 쿼리 로그를 분석하여 파일 정렬 작업을 제거하는 인덱스를 제안합니다. 하지만 추가되는 인덱스가 동일 테이블에 대한 삽입 및 업데이트 속도를 저하시키기 때문에 이러한 제안은 여전히 ​​사람의 검토가 필요합니다.

이 게시물을 요약하면 다음과 같습니다.