본문 바로가기

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

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


앞에서 AND와 OR을 이용한 WHERE절의 활용법을 익혔습니다.

한가지 생각해보죠.
우리가 회사의 사원들중에 월급이 '4000' 에서 '9000' 사이를 받는 직원들을 조회하고 싶다.
그렇다면 쿼리를 어떻게 작성해야 할까요?

앞에서 배운 AND를 이용해서 나타낼 수 있습니다.
SELECT dep.department_name, emp.first_name, emp.salary
FROM hr.employees emp INNER JOIN hr.departments dep
USING (department_id)
WHERE emp.salary>4000
AND emp.salary<9000;

쿼리는 INNER JOIN을 사용해서 이름을 같이 출력하도록 하였구요. INNER JOIN은 다른글 참조하시면 되겠습니다.
결과는 다음과 같습니다.


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

어떠세요? 의도하는 바대로 결과가 나온것을 알수 있죠?
하지만 AND를 쓸때 너무 문장이 길어져 버리죠?

이때 같은 의미로 쓸 수 있는 것이 있습니다.
바로 "BETWEEN ... AND ..."이라는 키워드 인데요.
영어식 표현으로는 "무엇과 무엇 사이에~"로 표현이 되겠습니다.

위의 쿼리중 WHERE 조건절을 다음과 같이 수정을 할 수 있는데요.
WHERE emp.salary>4000      ↔      WHERE emp.salary BETWEEN 4000 AND 9000;
AND emp.salary<9000;

이렇게 쓴다면 쿼리문도 훨씬 짧아지고 가독성이 좋아지는 것을 알 수 있습니다.

그렇다면 BETWEEN의 범위를 벗어난 그러니까 위의 BETWEEN 4000 AND 9000 의 범위 밖의 데이터 조회는 어떻게 할까요?
다른 키워드가 있을까요? 아닙니다. 그 해답은 NOT에 있습니다.

NOT을 붙여줌으로써 부정의 의미가 되어 의미가 바뀌게 되는데요.
다음과 같이 쿼리를 작성할 수 있습니다.
SELECT dep.department_name, emp.first_name, emp.salary
FROM hr.employees emp INNER JOIN hr.departments dep
USING (department_id)
WHERE emp.salary NOT BETWEEN 4000 AND 9000;


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

결과를 보시면 4000~9000 사이의 salary는 조회가 안되는 것을 볼 수 있습니다. 전체 결과를 봐도 결과는 동일합니다.

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

WHERE emp.salary NOT BETWEEN 4000 AND 9000;

또는

WHERE NOT emp.salary  BETWEEN 4000 AND 9000;


이상입니다!


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