본문 바로가기

Database/SQL

5. SQL SELECT문 - 4.WHERE절을 이용한 데이터 필터링 (IN. NOT)

4. WHERE절을 이용한 데이터 필터링 (IN. NOT)



(1) IN

WHERE절에서 여러 개의 조건을 OR관계로 묶어 나열하여 사용한다.



EX.1

SELECT product_name, product_price

FROM Products

WHERE vendor_id IN ('S001', 'S002')

ORDER BY product_name ;

* Products 테이블로부터 product_name, product_price 필드를 가져온다.

  단, vendor_id가 S001 이거나 S002 인 레코드에 한한다.

* 괄호 안의 컴마(,)로 구분된 2개의 조건은 OR조건과 같다



EX.2 = EX.1

SELECT product_name, product_price

FROM Products

WHERE vendor_id = 'S001' OR vendor_id = 'S002'

ORDER BY product_name ;

* Products 테이블로부터 product_name, product_price 필드를 가져온다.

  단, vendor_id가 S001 이거나 S002 인 레코드에 한한다.




CF. 왜 OR조건 대신 IN을 쓰는가?


* 조건이 여러개일 때 IN연산자가 쓰기 쉬우며 연산자 수가 줄어든다.

* 순서를 관리하기 쉽다.

* 실행속도가 빠르다

* IN 연산자 안에 다른 SELECT문을 넣을 수 있다(동적 WHERE절).

  ▶ 하위쿼리 내용 관련



(2) NOT

- 바로 뒤에 오는 조건을 부정하는 역할.

- 필터링할 필드의 앞에 사용한다.

- 하나의 간단한 조건일 경우 NOT을 사용하는 이점이 없다.

- NOT과 IN을 같이 사용하여 조건에 해당하지 않는 값을 필터링 할 때 사용할 수 있다.

- MySQL에서는 지원하지 않는다.


EX.1

SELECT product_name

FROM Products

WHERE NOT vendor_id = 'S001'

ORDER BY product_name ;

* Products 테이블에서 product_name 필드를 가져온다.

  단, vendor_id가 S001이 아닌 것에 한한다.

  product_name의 오름차순으로 정렬한다.

* WHERE NOT vendor_id  = 'S001' 은 WHERE vendor_id <> 'S001'과 동일하다.