# 09강. 정렬 - ORDER BY
**`ORDER BY 구`**
```
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명
```

- `SELECT` 명령에 `ORDER BY` 구를 지정하면 검색 결과의 행 순서를 바꿀 수 있다.
- `ORDER BY` 구를 지정하지 않을 경우에는 데이터베이스 내부에 저장된 순서로 반환된다.
- 언제나 정해진 순서로 결괏값을 얻기 위해서는 `ORDER BY` 구를 지정해야 한다.

---

## 1. ORDER BY로 검색 결과 정렬하기
- `SELECT` 명령의 `ORDER BY` 구로 정렬하고 싶은 열을 지정하면 지정된 열의 값에 따라 행 순서가 변경된다.
- 이때 `ORDER BY` 구는 `WHERE` 구 뒤에 지정한다.

**`WHERE 구 뒤에 ORDER BY 구를 지정하는 경우`**
`SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명`

- 검색 조건이 필요없는 경우에는 `WHERE` 구를 생략하는데 이때 `ORDER BY` 구는 `FROM` 구의 뒤에 지정한다.

**`FROM 구 뒤에 ORDER BY 구를 지정하는 경우`**
```
SELECT 열명 FROM 테이블명 ORDER BY 열명
```

---

## 2. ORDER BY DESC로 내림차순으로 정렬하기
- `ORDER BY` 구에 지정한 열의 값에 따라 행의 순서가 바뀐다.
- 기본적으로는 오름차순으로 정렬된다.
- 내림차순으로 정렬할 때는 열명 뒤에 `DESC`를 붙여 지정한다.

**`내림차순으로 정렬`**
```
SELECT 열명 FROM 테이블명 ORDER BY 열명 DESC
```

- 오름차순으로 정렬할 때는 내림차순과 달리 생략 가능하며 `ASC`로도 지정할 수 있다.

**`오름차순으로 정렬`**
```
SELECT 열명 FROM 테이블명 ORDER BY 열명 ASC
```

- `DESC`는 `descendant(하강)`, `ASC`는 `ascendant(상승)`의 약자이다.

##### DESC로 내림차순 정렬한다!
##### ASC로 오름차순 정렬한다!

- `ASC`나 `DESC`로 정렬방법을 지정하지 않은 경우에는 `ASC`로 간주되며, 즉 `ORDER BY`의 기본 정렬방법은 오름차순이다.

---

## 3. 대소관계
- `ORDER BY`로 정렬할 때는 값의 대소관계가 중요하다.
- 수치형 데이터라면 대소관계는 숫자의 크기로 판별하므로 이해하기 쉽다.
- 날짜시간형 데이터도 수치형 데이터와 마찬가지로 숫자 크기로 판별한다.
- 문자열형 데이터의 경우에는 알파벳이나 한글 자모음 배열순서를 사용하면 문자를 차례대로 나열할 수 있다.
- 알파벳, 한글 순이며 한글은 자음, 모음 순이다.

##### 문자열형 데이터의 대소관계는 사전식 순서에 의해 결정된다!

### 사전식 순서에서 주의할 점
- 수치형과 문자열은 대소관계 계산 방법이 서로 다르다.
- 수치형은 수치형의 대소관계로, 문자열형은 사전식 순서로 비교한다.
- 문자열형 열에 숫자 데이터를 넣을 수 있다(숫자도 문자의 일종이므로 저장하는 데 아무런 문제가 되지 않는다).
- 하지만 문자열형 열에 숫자를 저장하면 문자로 인식되어 대소관계의 계산 방법이 달라지므로 정렬이나 비교 연산을 할 때는 이 점에 주의해야 한다.

##### 수치형과 문자열형 데이터는 대소관계의 계산 방법이 다르다!

---

## 4. ORDER BY는 테이블에 영향을 주지 않는다.
- `ORDER BY`를 이용해 행 순서를 바꿀 수 있다.
- 하지만 이는 서버에서 클라이언트로 행 순서를 바꾸어 결과를 반환하는 것뿐, 저장장치에 저장된 데이터의 행 순서를 변경하는 것은 아닙니다.
- `SELECT` 명령은 데이터를 검색하는 명령이다. 이는 테이블의 데이터를 참조만 할 뿐이며 변경은 하지 않는다.

---