# 06강. 검색 조건 지정하기
- 데이터 검색에는 열을 지정하는 방법과 행을 지정하는 방법이 있다.

**`SELECT 구와 WHERE 구`**
```
SELECT 열1, 열2 FROM 테이블명 WHERE 조건식
```

- 행을 선택할 때는 `WHERE` 구를 사용하며, 열을 선택할 때는 `SELECT` 구를 사용한다.

---

## 1. SELECT 구에서 열 지정하기
- 데이터를 선택할 때는 열이나 행을 한정한다.

**`SELECT 구에서 열 지정`**
```
SELECT 열1, 열2 ... FROM 테이블명
```

- 열은 위의 구문처럼 `콤마(,)`를 이용하여 구분 지으며 여러 개를 지정할 수 있고 지정한 열만 결괏값으로 표시된다.
- 만약 열을 전혀 지정하지 않으면 구문 에러가 발생하며, 또한 테이블에 존재하지 않는 열을 지정해도 에러가 발생한다.
- 열 지정 순서는 임의로 정할 수 있다.
- 결과는 지정한 열의 순서대로 표시되며, 동일한 열을 중복해서 지정해도 무관하다.

##### SELECT 구에서 결과로 표시하고 싶은 열을 지정할 수 있다!

---

## 2. WHERE 구에서 행 지정하기
- 행 속에서 필요한 데이터만 검색하기 위해서는 `WHERE` 구를 사용한다.
- `WHERE` 구는 `FROM` 구의 뒤에 표기하며, 예약어 `WHERE` 뒤에 검색 조건을 표기한다.
- 조건에 일치하는 행만 `SELECT`의 결과로 반환된다.

**`WHERE 구로 행 추출`**
```
SELECT 열 FROM 테이블명 WHERE 조건식
```

### 구의 순서와 생략
- `SQL`에서는 구의 순서가 정해져 있어 바꿔적을 수 없다.
- `FROM` 구 뒤에 `WHERE` 구를 표기한다.
- 구에는 `WHERE` 구처럼 생략 가능한 것도 있다.
- 만약 `WHERE` 구를 생략한 경우는 테이블 내의 모든 행이 검색 대상이 된다.

### WHERE 구
- 조건식은 `열과 연산자, 상수로 구성되는 식`이다.
- 예를 들면 `no = 2`는 올바른 조건식이며, 이 조건식에 일치하는 행만 `SELECT`의 결과로 반환된다.
- `WHERE` 구로 행을 추출하면서 `SELECT` 구로 열 지정을 동시에 할 수도 있다.

##### WHERE 구의 조건에 일치하는 행만 결과로 반환된다!

### 조건식
- 조건식 `no = 2`는 `no 열 값이 2일 경우에` 참이 되는 조건이다.
- `no = 2`은 `no` `=` `2`의 세 개 항목으로 나눌 수 있다. 첫 번째 항목인 `no`는 열 이름이고 두 번째 항목 `=`는 연산자이다.
- 연산자란 어떤 계산을 할지 지정하는 것으로 보통 기호로 표기한다.
- `=`의 경우, 좌우로 2개 항목이 필요한 `이항 연산자`에 해당하며 일반적으로 많이 쓰이는 기호이다.
- `=` 연산자를 기준으로 좌변과 우변의 항목을 비교하고, 서로 같은 값이면 참을, 같지 않으면 거짓을 반환한다.
- 조건식을 만족한(참) 행만 결괏값으로 반환된다.
- `=` 연산자는 비교한 결괏값이 참인지 거짓인지를 반환하므로 `비교 연산자`라 부른다.

##### 조건식은 참 또는 거짓의 진리값을 반환하는 식으로 비교 연산자를 사용해 표현한다!

### 값이 서로 다른 경우 '<>'
- 비교 연산자는 `=` 외에도 존재한다.
- 조건식에 사용하는 연산자를 바꾸거나 복수의 연산자를 조합하면 복잡한 조건식을 만들 수 있다.
- `=` 연산자가 서로 같은 값인지를 비교하는 연산자인 데 반해, `<>` 연산자는 서로 다른 값인지를 비교하는 연산자이다.

##### <> 연산자를 통해 '값이 서로 다른 경우' 참이 되는 조건식으로 변경할 수 있다!

- `WHERE` 구에서 지정한 조건식에 따라 반환되는 행의 갯수는 달라지며, 반드시 하나의 행만 반환되는 것은 아니다.
- 조건식에 일치하는 행이 전혀 없는 경우에는 아무것도 반환되지 않을 수도 있다.

---

## 3. 문자열형의 상수
- 수치형 조건식의 경우 비교할 숫자를 그대로 조건식에 표기한다.
- 하지만 문자열형을 비교할 경우는 `'banjjoknim'`처럼 `싱글쿼트(' ')`로 둘러싸 표기해야 한다.
- 날짜시간형의 경우에도 싱글쿼트로 둘러싸 표기하며, 이때 연월일을 `하이픈(-)`으로 구분한다.
- 시각은 `시분초`를 `콜론(:)`으로 구분하여 표기한다.
- 문자열형의 열과 비교하기 위해서는 조건으로 지정할 값도 그 자료형에 맞춰 지정해야 한다.
- 자료형에 맞게 표기한 상수값을 `리터럴(literal)`이라 부른다.
- 문자열 리터럴은 싱글쿼트로 둘러싸 표기한다.

```
수치형 상수 -> 1 100 -3.8
문자열형 상수 -> 'ABC' 'banjjoknim'
날짜시간형 상수 -> '2013-01-25' '2013-03-03 10:21:00'
```

---

## 4. NULL값 검색
- `=` 연산자로 `NULL`을 검색할 수는 없다.

### IS NULL
`NULL` 값을 검색할 때는 `=` 연산자가 아닌 `IS NULL`을 사용한다.
- `IS NULL`은 술어로 연산자의 한 종류로 생각하면 된다.
- `birthday IS NULL` 과 같이 사용하면 된다.
- 반대로 `NULL` 값이 아닌 행을 검색하고 싶다면 `IS NOT NULL`을 사용하면 된다.

##### NULL 값을 검색할 경우에는 IS NULL 을 사용한다!

---

## 5. 비교 연산자
- `=` 연산자와 `<>` 연산자, `IS NULL`로 검색할 수 있다.
- `WHERE` 구로 지정하는 조건식은 참과 거짓을 반환하는 비교 연산자나 술어를 사용해서 표기할 수 있다.
- `= 연산자` : 좌변과 우변의 값이 같을 경우 참이 된다.
- `<> 연산자` : 좌변과 우변의 값이 같지 않을 경우 참이 된다.
- `> 연산자` : 좌변의 값이 우변의 값보다 클 경우 참이 된다. 같거나 작을 경우는 거짓이 된다.
- `>= 연산자` : 좌변의 값이 우변의 값보다 크거나 같을 경우 참이 된다. 작을 경우는 거짓이 된다.
- `< 연산자` : 좌변의 값이 우변의 값보다 작을 경우 참이 된다. 같거나 클 경우는 거짓이 된다.
- `<= 연산자` : 좌변의 값이 우변의 값보다 작거나 같을 경우 참이 된다. 클 경우는 거짓이 된다.

- `< 연산자와 > 연산자`는 대소관계를 비교하는 연산자이지만 `=`을 붙임으로써 서로 값이 같은 경우도 비교할 수 있다.
- `=`은 `<`, `>`의 뒤에 붙인다(앞에 붙이는 것은 틀린 표기법).
- 또한 `<=`나 `>=`을 표기할 때에는 사이에 스페이스를 넣어서는 안된다.
- `< =`와 같이 스페이스를 넣으면 `<`와 `=`로 연산자가 두 개라고 판단하여 에러가 발생한다.

---