# 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="<https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FJTHQqtqzhXOPKmnPvcpA%2Fproduct.csv?alt=media&token=c2a7529f-38f5-4857-94e2-4e4ce4ff7900>" %}

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

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

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

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

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2Fra9xyvApcyvNqn00KaFu%2FScreenshot_17.png?alt=media&#x26;token=7498205f-bd59-4a38-99a0-0cda07e744b3" 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. 상품명이 셔츠, 반팔티, 운동화가 아닌 상품들만 출력해봅시다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://leeans-dev-book.gitbook.io/docs/lecture/database/where.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
