본 포스트에서는 WHERE절에서 쓰이는 IN에 대해서 살펴볼 것이다. 데이터의 필터 역할을 하는 WHERE에서 좀 더 섬세한 필터링을 위해서 사용하는 것 중에 하나가 IN이다. 원하는 결과값을 포함 하는 것만을 아니면 제외한 것을 추출할 때 사용할 수 있는 IN에 대해서 자세히 알아보자.
WHERE IN
01 WHERE IN : 이 안에 있으면 보여주세요
WHERE IN은 WHERE BETWEEN과 사용법이 비슷하다.
일단 어떻게 쿼리를 작성하는지 살펴보도록 하자.
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를 갖고 있는 열만 보여주세요. |
'ICT > SQL' 카테고리의 다른 글
SQL 문법 | 집합연산자 | ALL (0) | 2021.09.19 |
---|---|
SQL 문법 | 집합연산자 | ANY (0) | 2021.09.18 |
SQL 문법 | 데이터 조회 및 필터 | EXCEPT (FEAT. MINUS) (0) | 2021.09.16 |
SQL 문법 | 데이터 조회 및 필터 | INTERSECT (0) | 2021.09.15 |
SQL 문법 | 데이터 조회 및 필터 | UNION 과 UNION ALL (0) | 2021.09.14 |
댓글