MySQL 총 정리5: ORDER BY로 데이터 정렬

데이터 분석/MySQL

MySQL 총 정리5: ORDER BY로 데이터 정렬

해리누나 2024. 10. 2. 17:10
반응형

 


ORDER BY

SQL은 쿼리의 문법 작성 순서가 정해져 있다.

  • SELECT: 가져올 컬럼을 지정
  • FROM: 데이터를 가져올 테이블을 지정
  • WHERE: 데이터를 필터링할 조건 지정
  • GROUP BY: 데이터를 그룹화
  • HAVING: 그룹화된 데이터에 대한 조건 지정
  • ORDER BY: 데이터를 정렬
    + LIMIT: 반환할 데이터의 양을 제한

 

※ 만일 ORDER BY가 GROUP BY나 WHERE보다 앞에 위치하면 에러가 나니 꼭 순서를 지키도록 한다.

※ ORDER BY를 사용하지 않을 경우, 데이터의 출력 순서는 보장되지 않는다.

※ SQL 쿼리의 작성순서와 실제 쿼리의 처리 순서는 다르다는 것을 기억하자.

 

1) 오름차순 정렬(ASC - Ascending)

책 이름을 기준으로 오름차순 정렬

 

좋아요 수를 기준으로 오름차순 정렬

 

고용일을 기준으로 오름차순 정렬

• (작은 값 → 큰 값)

• 오름차순 정렬인 ASC은 기본값이라 생략이 가능하다.

• 값이 문자열일 경우, 알파벳 순서 /사전 순서로 정렬된다.

※ 참고로 MySQL에서 NULL 값은 숫자형과 문자열형 데이터에서 가장 작은 값으로 간주된다.

 

2) 내림차순 정렬(DESC - Descending)

책 이름을 기준으로 내림차순 정렬

 

좋아요 수를 기준으로 내림차순 정렬

 

고용일을 기준으로 내림챃순 정렬

• (큰 값 → 작은 값)

 

3) 여러 컬럼을 기준으로 정렬

 • 위와 같이 여러 열을 기준으로도 정렬이 가능한데,

 • 출력된 데이터를 보면, singer순으로는 정렬이 제대로 되어있지만, like_number의 경우 제대로 정렬이 되어있지 않는 모습을 확인할 수 있다.

➯ 하나의 행은 세트로 같이 움직이니 두 조건을 모두 완벽하게 만족하면서 정렬하는 것은 불가능하다.

➯ 그렇다면 왜 굳이 여러 열을 기준으로 데이터를 출력하는 걸까?

 

• 첫 번째 정렬의 기준이 된 컬럼을 기준으로 동일한 값을 가지는 행들의 경우 두 번째 컬럼을 기준으로 정렬이 되는데, 이를 통해 세부적인 정렬이 가능하기 때문이다.

• 단일 컬럼으로는 데이터를 충분히 세밀하게 정렬을 할 수가 없다.

➯ 가수에 따라 좋아요 수를 기준으로 정렬하고 싶다던가, 학년에 따라 이름을 정렬하고 싶다던가 등 세밀한 정렬은 여러 열을 기준으로 정렬해야 가능하다.

 

※ 정렬의 기준이 되는 첫 번째 컬럼이 복수값이 나올 수 없는 열이라면, 여러 열을 기준으로 정렬하는 것은 보통 의미가 없거나 불필요하다.

➯ 즉, 반복값이 나올 수 없는 데이터는 굳이 2차 정렬을 할 필요가 없다는 얘기다

 

4) LIMIT

급여가 가장 높은 상위 3명의 사원

 

급여가 가장 낮은 하위 3명의 사원

• LIMIT을 사용해 출력되는 데이터의 양을 조절할 수 있다.

 

📝 페이징(Paging)

SELECT * FROM 테이블명
LIMIT offset, row_count;
  • 페이징은 많은 데이터를 나눠서 볼 수 있도록 한 번에 일부 데이터만 가져오는 방식을 말한다.
  • 페이징은 LIMIT과 OFFSET을 조합하여 구현할 수 있다.
  • OFFSET: 건너뛸 행의 수  /  ROW_COUNT: 반환할 행의 수
  • 정렬 없이 LIMIT을 사용할 경우 매번 결과의 순서가 달라지니 페이징을 할 때는 ORDER BY와 함께 사용한다.

 

• 이 경우, 정렬이 완료된 결과에서 5번째 행부터 3개의 데이터를 반환하라는 뜻이다.

 


 

728x90
반응형