[SQL 쿡북/02장] 쿼리 결과 정렬

정은아·2025년 2월 27일

[도서] SQL 쿡북

목록 보기
2/13
post-thumbnail

02장. 쿼리 결과 정렬


🎨 2.1 지정한 순서대로 쿼리 결과 반환하기

  • ORDER BY 절에서는 결과셋의 행을 정렬한다.
  • ORDER BY는 오름차순으로 정렬되므로 ASC의 명시는 선택사항이지만, 반대로 내림차순으로 정렬할 때는 DESC를 지정한다.

🎨 2.2 다중 필드로 정렬하기

  • ORDER BY 절에서 쉼표로 구분하여 정렬할 여러 열을 나열한다.
  • ORDER BY의 우선순위는 왼쪽 → 오른쪽 순이다.
    • SELECT 목록에서 열의 숫자 위치를 사용하여 정렬할 경우 해당 숫자는 SELECT 목록의 항목 수보다 크지 않아야 한다.
  • 일반적으로 SELECT 목록에 없는 열로 정렬할 수도 있는데, 그렇게 하려면 열 이름을 명시적으로 지정해야한다.
    • 하지만 쿼리에서 GROUP BY나 DISTINCT를 사용할때는 SELCET 목록에 없는 열 기준으로 정렬 가능하다.

🎨 2.3 부분 문자열로 정렬하기

  • DBMS의 부분 문자열 함수를 사용하면 문자열의 모든 부분을 기준으로 쉽게 정렬한다.

    DB2, MySQL, Oracle, PostgreSQL
        ORDER BY 절에서 SUBSTR 함수를 사용한다.
    SQL Server
         ORDER BY절에서 SUBSTRING 함수를 사용한다.
         SQL Server의 SUBSTRING은 문자 수를 지정하는 세번째 매개변수가
        필요하므로 SUBSTR 함수와 다르다.

        

🎨 2.4 혼합 영숫자 데이터 정렬하기

Oracle, SQL Server, PostgreSQL
     REPLACE 및 TRANSLATE 함수를 사용하여 정렬한 문자열을 수정한다.
DB2
     암시적 유형 변환은 Oracle 또는 PostgreSQL보다 DB2에서 더 엄격하므로
     뷰가 유효하려면 DEPTNO 컬럼을 CHAR로 캐스트해야한다.
     Oracle, PostgreSQL일 경우 같은 방식으로 REPLACE 및 TRANSLATE를 사용하지만
     DB2에서는 TRANSLATE의 인수 순서가 다르다.


🎨 2.5 정렬할 때 null 처리하기

  • 원하는 데이터 형태와 특정 RDBMS가 NULL 값을 정렬하는 방법에 다라 null 허용 열을 오름차순 또는 내림차순으로 정렬할 수 있다.

    DB2, MySQL, PostgreSQL, SQL Server
         값이 null일 때 CASE 식으로 사용하여 플래그를 수행한다.
         두 개의 값을 지니는 플래그를 갖는다.
         하나는 null을 나타내고 다른 하나는 null이 아닌 값을 나타낸다.
         이 플래그 열을 ORDER BY 절에 추가하면
         null이 아닌 값을 건드리지 않고 null 값을 처음에 정렬할지 또는
         마지막으로 정렬할지 여부를 쉽게 제어할 수 있다.
    Oracle
         다른 플랫폼과 같이 사용하거나, Oracle 전용 해법을 사용할 수 있다.
         전용 해법의 경우, ORDER BY절에서 NULLS LAST
         혹은 NULLS FIRST를 사용한다.


🎨 2.6 데이터 종속 키 기준으로 정렬하기

  • ORDER BY 절에서 CASE 식을 사용한다.
  • CASE 식을 사용하여 결과의 정렬 방식을 동적으로 변경한다. ORDER BY에 전달된 값은

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글