> For the complete documentation index, see [llms.txt](https://leeans-dev-book.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://leeans-dev-book.gitbook.io/docs/lecture/database/where.md).

# WHERE 조건

```sql
--Q1
SELECT 상품명, 가격 FROM product
--Q2  
SELECT * FROM product ORDER BY 가격 
--Q3
SELECT * FROM product ORDER BY 가격 ASC, 카테고리 ASC
--Q4
SELECT * FROM EMPLOYEE e 
ORDER BY 근무기간, 이름
```

{% file src="/files/bDEnw76UCB8ATPqh1AE7" %}

이번시간에는 데이터를 많이 넣어두고 진행해봅시다.

csv 파일을 다운로드 받고&#x20;

기존 product 테이블의 데이터는 드래그 후 삭제 & 저장

데이터 가져오기 클릭 후 'csv에서 가져오기' 선택 후 다음

<figure><img src="/files/SEsQ9ivsFZN0HlJ5IVmL" alt=""><figcaption></figcaption></figure>

한글 들어있는 데이터의 경우 인코딩부분을 euc-kr로 변경해야 안깨집니다.

### <mark style="color:yellow;">**원하는 행만 필터링 할 수 있는 WHERE 문법**</mark>&#x20;

출력되는 행이 너무 많다면&#x20;

WHERE 문법을 뒤에 붙여서 원하는 조건으로 필터링할 수 있습니다.&#x20;

```sql
SELECT 컬럼명 FROM 테이블명 WHERE 조건식
```

WHERE 뒤에 조건식을 입력하면 그거와 일치하는 행만 보여줍니다.&#x20;

조건식 자리에는 **컬럼명 = 값** 이런 식으로 넣을 수 있는데

등호, 부등호 이런 것들을 전부 이용가능합니다.&#x20;

```sql
SELECT * FROM product WHERE 카테고리 = '가구'
```

이러면 카테고리 컬럼 값이 '가구' 인 행만 필터링해줍니다.

컬럼명에는 따옴표 안써도 되는데 '문자' 값은 따옴표 안에 적어야합니다.&#x20;

&#x20;

```sql
SELECT * FROM product
WHERE 가격 > 50000 
```

\>, <, =, != 이런거 다 됩니다. != 는 같지않다는 소리입니다.

\- 크거나 같다를 표현하고 싶으면 >=, <= 이렇게 등호를 오른쪽에 씁니다.

\- 문자값 표현할 땐 '어쩌구' 이렇게 따옴표 써야하지만 숫자는 따옴표 필요없음&#x20;

\- SQL 작성시 중간중간 엔터쳐도 상관없습니다.

영어숙련자라면 where 라는 단어 보면 자연스럽게 "조건식쓰는 부분이구나\~" 가 떠오르는데

토종 한국인은 그런 느낌을 받을 수가 없으니까&#x20;

그냥 where 조건식 쓰면 행 필터링 된다고 외워가면 됩니다.&#x20;

```sql
SELECT * FROM product
WHERE 가격 BETWEEN 5000 AND 8000 
```

가격이 5000이상 8000이하 이런걸 필터링하고 싶으면 **컬럼명 BETWEEN A AND B** 쓰면 됩니다.

A이상 & B이하를 표현하는 문법이라

위 코드에서는 가격이 딱 5000, 8000인 상품도 포함됩니다.&#x20;

<mark style="color:yellow;">**AND / OR / NOT으로 조건식 업그레이드 가능**</mark> &#x20;

가끔은 여러 조건을 넣고싶을 때가 있습니다.

예를 들어서 1. 카테고리가 가구 2. 가격이 5000원인 것들만 필터링하고 싶으면 어떻게합니까.&#x20;

조건식이 2개 이상 필요한 경우 조건식 2개를 AND, OR, NOT 붙여서 연결해줄 수 있습니다.&#x20;

&#x20;

```sql
SELECT * FROM product 
WHERE 카테고리 = '가구' AND 가격 = 5000; 
```

AND는 왼쪽 오른쪽 조건이 전부 맞으면\~ 이라는 뜻입니다.&#x20;

그래서 위 코드를 실행하면 카테고리가 '가구' 이면서 가격이 5000인 것을 출력해줍니다.

```sql
SELECT * FROM product 
WHERE 카테고리 = '가구' OR 가격 = 5000; 
```

OR는 왼쪽 오른쪽이 둘 중 하나만 맞아도\~ 라는 뜻입니다.

그래서 위 코드를 실행하면 카테고리가 '가구' **또는** 가격이 5000인 것을 출력해줍니다.

```sql
SELECT * FROM product 
WHERE NOT 카테고리 = '가구'
```

NOT은 제외라는 뜻입니다.&#x20;

그래서 위 코드는 카테고리가 '가구'가 아닌 것들만 출력해줍니다.

이렇게 SQL은 영어단어 몇개만 알면 되는거라 초등학생 데려다놔도 잘합니다.&#x20;

```sql
SELECT * FROM product 
WHERE (카테고리 = '가구' OR 카테고리 = '옷') AND 가격 = 5000
```

AND 혹은 OR이 여러개 있으면 괄호같은거 쳐도 됩니다.

괄호있으면 괄호안에 있는 것들 먼저 연산한다는거 초등학교 수학시간에 배웠죠?

SQL도 마찬가지로 괄호안에 있는 것들을 먼저 연산해줍니다.&#x20;

그래서 위 코드는 뭐가 출력될지 한번 예상하고 실행해봅시다.

✨실습. 상품 카테고리가 신발, 가전, 식품인 것만 출력해보자.

<mark style="color:yellow;">**IN 문법 쓰면 OR 여러개 필요없음**</mark>

```sql
SELECT * FROM product 
WHERE 카테고리 = '신발' OR 카테고리 = '가전' OR 카테고리 = '식품'
```

이렇게 OR 3번 쓰면 됩니다.

근데 이것보다 간단한 방법이 있습니다.

**컬럼명 IN (값1, 값2 ... )** 쓰면 컬럼명에서 값1, 값2 등을 만족하는 행을 전부 출력해줍니다.

그래서 위 코드는 카테고리가 '신발' or '가전 or '식품' 인 행을 전부 출력해줍니다.

쉽게 말하면 그냥 같은 컬럼에서 OR 연산자가 여러개 필요할 때 IN () 문법을 쓰면 짧아집니다.&#x20;

```sql
SELECT * FROM product 
WHERE 카테고리 IN ('신발', '가전, '식품')
```

(참고)

\- OR 여러개를 IN ()으로 축약할 수 있으면 하는게 좋습니다. 그게 처리속도가 대부분 더 빠름&#x20;

\- IN () 쓰면 괄호 안에 SELECT 또 사용할 수 있는데 나중에 알아봅시다. 서브쿼리라고 합니다.&#x20;

&#x20;

Q1. 오늘 다룬 테이블에서 재고가 20이하인 상품들을 **상품명 가나다 순으로** 출력해보십시오.

Q2. 가격이 3000원 미만이거나 6000원 초과인 상품들만 출력해봅시다.

Q3. 카테고리가 옷이 아닌 것들 중 가격이 5천원인 상품들만 출력해봅시다.

Q4. 상품명이 셔츠, 반팔티, 운동화가 아닌 상품들만 출력해봅시다.
