본문 바로가기

데이터베이스/SQL & PL/SQL

[SQL] WHERE 절을 활용하자, IN!


이번 글에서 알아볼 IN EXITS는 BETWEEN과는 조금 다릅니다.
BETWEEN 이 어느 시작값에서 어느 끝값까지 범위값을 조건으로 하는데에 비해서
IN 과 EXITS는 범위라는 개념보다는 여러 해당 값을 조건으로 한다고 할 수 있습니다.

예를 들면 IN은 OR의 개념과 비슷하다고 보면 되겠는데, 절대 똑같다는 말이 아닙니다.
SELECT department_id, first_name, salary
FROM employees
WHERE department_id=10
OR department_id=20
OR department_id=30;



위의 쿼리는 부서아이디가 10, 20, 30인 사원들의 정보를 보여주고 있는데, 이 또한 너무 깁니다..
마치 우리가 전글처럼 AND로 사용해서 범위를 조건으로 내밀때 BETWEEN으로 WHERE절을 간단히 만들어 줄 수 있었는데,
역시나 이러한 것도 우리가 다루게될 IN 으로 해결할 수 있겠습니다.

위의 OR을 사용한 쿼리를 IN 으로 바꿔보면 다음과 같습니다.

SELECT department_id, first_name, salary
FROM employees
WHERE department_id IN (10, 20, 30);

동일한 결과가 나오는 것을 알 수 있습니다.
IN에 대해서는 의미가 이해가 되시죠? "~이라는 조건 안에 " 라는 뜻으로 생각하시면 되겠습니다.

한가지더! 그렇다면 10, 20, 30으로 만족되는 결과가 아니라 10, 20, 30 외의 결과를 보고 싶다면 어떻게 해야 할까요?
NOT 이 있습니다. NOT 을 붙여주게 되면 의미가 바뀝니다. "~이라는 조건이 아닌~"

그렇다면 위의 쿼리에 NOT을 붙여 결과를 보겠습니다.
SELECT department_id, first_name, salary
FROM employees
WHERE department_id NOT IN (10, 20, 30);


-전체 결과가 아닌 결과의 일부입니다.

물론 전체 결과는 아니지만 위를 보시면 해당 조건인 10, 20, 30은 나와있지 않죠? 전체 결과를 보더라도 동일합니다.
이렇게 NOT을 이용해 IN의 활용을 확장 시킬 수 있겠습니다.

참고로 NOT은 IN 앞에도 올 수 있고, 컬럼명 앞에도 올 수 있습니다.

WHERE department_id NOT IN (10, 20, 30);

또는

WHERE NOT department_id IN (10, 20, 30);



이상입니다!



도움 되셨다면 댓글 부탁드립니다.