본문 바로가기
  • BLG-ZYNGIROK-모토-꿈꾸며-배우고-나누며-이루다
ICT/SQL

SQL 문법 | 데이터 조회 및 필터 | WHERE IN

by dazwischen 2021. 9. 17. 01:00
반응형

본 포스트에서는 WHERE절에서 쓰이는 IN에 대해서 살펴볼 것이다. 데이터의 필터 역할을 하는 WHERE에서 좀 더 섬세한 필터링을 위해서 사용하는 것 중에 하나가 IN이다. 원하는 결과값을 포함 하는 것만을 아니면 제외한 것을 추출할 때 사용할 수 있는 IN에 대해서 자세히 알아보자.

WHERE IN

SQL 문법 데이터 조회 필터 WHERE IN

01 WHERE IN : 이 안에 있으면 보여주세요

WHERE IN은 WHERE BETWEEN과 사용법이 비슷하다.

 

SQL 문법 | 데이터 조회 및 필터 | WHERE BETWEEN

WHERE은 여러가지 다른 명령어들과 함께 사용이 가능하다. 그 중 BETWEEN에 대해서 알아보자. BETWEEN은 AND와 함께 무엇과 무엇 사이라는 뜻을 갖고 있다. 본래의 뜻과 마찬가지의 기능을 갖고 있다. 01

zyngirok.com

일단 어떻게 쿼리를 작성하는지 살펴보도록 하자.

SELECT	COL1, COL2
FROM	TABLE
WHERE	COL2 IN (VAL1, VAL2, VAL3)
;

WHERE절을 작성할 때 필터링 하고 싶은 칼럼의 이름을 WHERE 다음 첫번째로 작성해 주고 IN 뒤에 괄호 안에 원하는 값들을 적어준다. 원하는 값들의 수는 임의로 정할 수 있다. (마음대로 정해도 된다.) 위의 쿼리문을 해석해 보자면 'COL2의 값이 VAL1, VAL2, VAL3 중에 있다면 보여주세요' 이다.

EXAMPLE

행선지가 제주와 부산인 승객의 이름과 전화번호, 행선지를 알려주세요.

SELECT	NAME, TEL, DESTINATION
FROM	PASSENGER
WHERE	DESTINATION IN ('JEJU', 'BUSAN')
;

02 WHERE NOT IN : 이 안에 있다면 제외해주세요

WHERE IN의 반대 기능을 사용할 때는 NOT을 이용하면 된다. IN 앞에 NOT을 붙이면 WHERE NOT IN 절은 'IN 안의 값을 갖고 있다면 결과값에서 제외해주세요' 와 같아진다.

SELECT	COL1, COL2, COL3
FROM	TABLE
WHERE	COL3 NOT IN (VAL1, VAL2, VAL3)
;

쿼리 해석 시 부정 서술어(제외)를 이용하지 않고 표현하자면 'COL3의 값들이 VAL1, VAL2 또는 VAL3 와 같지 않은 결과만 보여주세요' 라고 할 수 있다.

EXAMPLE

행선지가 옥스포드와 뮌헨인 승객을 제외한 모든 승객의 이름과 전화번호 그리고 행선지를 알려주세요.

SELECT	NAME, TEL, DESTINATION
FROM	PASSENGER
WHERE	DESTINATION NOT IN ('OXFORD', 'MUNICH')
;

03 MULTI-COLUMN : 여러개의 컬럼에 걸쳐서 필터링 하고 싶을 때

IN 여러개 컬럼 NOT IN 여러개 컬럼으로 이용하고 싶은 욕구가 생길 수 있다. 당연히 가능하다.

SELECT 	COL1, COL2, COL3
FROM	TABLE
WHERE	(COL1, COL2) IN ( (VAL01, VAL11), (VAL02, VAL12), (VAL03, VAL13) )
;

이렇게 순서쌍으로 작성하면 COL1과 COL2의 값이 VAL0n, VAL1n (n=1,2,3) 값과 동시에 일치 할 때 조회가 이루어 진다. 이해를 위해 풀어서 쿼리문을 작성한다면 정확히 이해하는데 도움이 될 것이다.

SELECT	COL1, COL2, COL3
FROM	TABLE
WHERE		(COL1 = VAL01 AND COL2 = VAL11)
	OR	(COL1 = VAL02 AND COL2 = VAL12)
        OR	(COL1 = VAL03 AND COL2 = VAL13)
;

주의할 점은 멀티 컬럼을 작성할 때 괄호 안에 넣어주어야 한다는 점이다. 순서쌍이기 때문에 괄호 안의 순서와 IN절 내의 순서쌍 값들의 순서가 일치해야 한다.

SUMMARY

쿼리 해석
WHERE COL_NAME IN (VAL01, VAL02, VAL03) COL_NAME안에 IN 절에 있는 열만 보여주세요.
WHERE COL_NAME NOT IN (VAL01, VAL02) COL_NAME안에 IN 절에 있는 값이 없다면 보여주세요.
WHERE (COL_NAME01, COL_NAME02) IN ( (VAL01, VAL11), (VAL02, VAL12) ) COL_NAME01과 COL_NAME02 안에 각각 VAL01과 VAL11 혹은 VAL02와 VAL12를 갖고 있는 열만 보여주세요.

 

 

 

 

 

반응형

댓글