솜이의 데브로그

9,10강 ) 정렬, 복수의 열 지정 정렬 본문

CS/Database

9,10강 ) 정렬, 복수의 열 지정 정렬

somsoming 2021. 10. 8. 23:32

Reference : SQL 첫걸음

 

9강 ) 정렬 - ORDER BY

 

SELECT명령의 ORDER BY 구를 사용하여 검색 결과의 행 순서를 바꿀 수 있다.

ORDER BY 구를 지정하지 않을 경우 데이터베이스 내부에 저장된 순서로 반환된다.

 

<ORDER BY 구>

SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명

 

1. ORDER BY로 검색 결과 정렬하기

정렬하고 싶은 열을 지정하며, ORDER BY 구는 WHERE구 뒤에 지정한다.

ORDER BY의 기본 정렬 방법은 오름차순이다.

 

Ex)

SELECT * FROM sample31 ORDER BY age;  //age열의 값을 오름차순으로 정렬하기
SELECT * FROM sample31 ORDER BY address;  //address 열로 정렬하기

 

 

2. ORDER BY DESC로 내림차순으로 정렬하기

내림차순은 열명 뒤에 DESC를 붙여 지정한다.

(오름차순은 내림차순과 달리 생략 가능하며 ASC로도 지정할 수 있다.)

 

Ex)

SELECT * FROM sample31 ORDER BY age DESC;  //age열의 값을 DESC로 내림차순 정렬 (아래로갈수록 작아짐)
select * FROM sample31 ORDER BY age ASC;  //age열의 값을 ASC로 오름차순 정렬 (아래로갈수록 커짐)

 

 

3. 대소관계

  • 수치형 데이터라면 대소관계는 숫자의 크기로 판별
  • 날짜시간형 데이터 역시 숫자 크기로 판별.
    • 1999년 < ... < 2013년 < 2014년 ..  (최근으로 갈수록 커짐)
  • 문자열 데이터는 알파벳, 한글순이며, 한글은 자음, 모음순이다. 즉, 문자열 데이터의 대소관계는 사전식 순서에 의해 결정된다.
    • 우선순위 (1) 가방 (2) 가족 (3) 나방
  • 문자열 형에 숫자를 저장하면 문자로 인식되어 대소 관계의 계산 방법이 달라진다!!
    • Ex) 문자열형과 수치형의 경우 정렬순서는 다음과 같다.
      a
      (문자열형 VARCHAR)
      b 수치형 (INTEGER)
      1 1
      10 2
      11 10
      2 11

4. ORDER BY는 테이블에 영향을 주지 않는다.

  • ORDER BY를 이용해 행 순서를 바꾸는 것은 서버에서 클라이언트로 행 순서를 바꾸어 결과를 반환하는 것 뿐이다.
  • 따라서 저장장치에 저장된 데이터의 행 순서는 변경되지 않는다.

 

 

10강 ) 복수의 열을 지정해 정렬하기

 

ORDER BY 구 Ex

SELECT 열명 FROM 테이블명 WHERE 조건식
ORDER BY 열명1 [ASC|DESC], 열명2 [ASC|DESC] ...

복수의 열로 정렬 시 NULL 값에 주의해야 한다.

 

 

1. 복수 열로 정렬 지정

  • 데이터베이스 서버의 상황에 따라 어떤 순서로 행을 반환할 지 결정된다. (같은 값을 가진 행의 순서 등)
  • 따라서 언제나 같은 순서로 결과를 얻고 싶다면 반드시 ORDER BY 구로 순서를 지정해야한다.
  • 예시) 다음과 같은 테이블이 있을 때, a열을 기준으로 정렬 후 값이 같은 부분은 b열로 정렬하도록 한다.
    • a b
      1 1
      2 1
      2 2
      1 3
      1 2
      SELECT * FROM sample32 ORDER BY a,b; //sample32를 a열과 b열로 정렬​
    • 결과
    • a b
      1 1
      1 2
      1 3
      2 1
      2 2
    • 위의 식에서 a와 b의 열 지정 순서를 바꾸면 먼저 b열로 정렬 후, 값이 같은 부분은 a열로 정렬된다.

 

 

2. 정렬 방법 지정하기

  • 복수의 열을 지정한 경우에도 각 열에 대해 개별적으로 정렬 방법을 지정할 수 있다.
  • 각 열 뒤에 ASC나 DESC를 붙인다.
  • 예시)
    • SELECT * FROM sample32 ORDER BY a ASC, b DESC;
    • a b
      1 3
      1 2
      1 1
      2 2
      2 1
      (결과)
  • 복수의 열을 지저하는 경우에도 정렬 방법을 생략하면 기본값은 ASC가 된다.

 

3. NULL 값의 정렬 순서

  • NULL 값은 특성 상 대소비교를 할 수 없어 정렬 시에는 별도의 방법으로 취급한다.
  • 특정 값보다 큰 값 / 특정 값보다 작은 값 의 두가지로 나뉘며 둘 중 하나의 방법으로 대소를 비교한다.
  • ORDER BY로 지정한 열에서 NULL 값을 가지는 행은 가장 먼저 표시되거나 가장 나중에 표시된다. (데이터베이스 제품에 따라 기준이 다름.)
    • MySQL의 경우 NULL값을 가장 작은 값으로 취급해 ASC에서는 가장 먼저, DESC에서는 가장 나중에 표시한다.