BETWEEN AND 연산자
범위선택검색 연산자입니다. 값의 하한과 상한을 지정하여 그 범위에 포함되는 데이터를 검색하여 결과값으로 표시합니다. [BETWEEN 하한값 AND 상한값] 대신 [대상컬럼 >= 하한값 AND 대상컬럼 <= 상한값]을 사용할 수 있습니다.
이 글의 예시는 아래 글의 초기 데이터를 사용했습니다.
예시1
emp테이블에서 데이터 형식이 number인 empno 컬럼의 데이터를 Between문을 사용해 7654부터 7782 사이의 데이터를 취득하는 SQL문입니다.
COLUMN empno FORMAT 99999;
COLUMN ename FORMAT A6;
COLUMN hiredate FORMAT A10;
alter session set nls_date_format = 'YYYY/MM/DD';
SELECT empno, ename, hiredate FROM emp WHERE empno BETWEEN 7654 AND 7782;
실행 결과는 다음과 같습니다. 초과, 미만이 아닌 이상, 이하를 의미하기 때문에 7654, 7782를 포함하는 결과가 출력됩니다.
EMPNO ENAME HIREDATE
------ ------ ----------
7654 MARTIN 1981/09/28
7698 BLAKE 1981/05/01
7782 CLARK 1981/06/09
Between And 대신 부등호(>=, <=)를 사용해 같은 결과를 취득할 수 있습니다.
COLUMN empno FORMAT 99999;
COLUMN ename FORMAT A6;
COLUMN hiredate FORMAT A10;
alter session set nls_date_format = 'YYYY/MM/DD';
SELECT empno, ename, hiredate FROM emp WHERE EMPNO >= 7654 AND EMPNO <= 7782;
EMPNO ENAME HIREDATE
------ ------ ----------
7654 MARTIN 1981/09/28
7698 BLAKE 1981/05/01
7782 CLARK 1981/06/09
예시2
emp테이블에서 데이터 형식이 date인 hiredate 컬럼의 데이터를 Between문을 사용해 1981/09/08 부터 1981/11/17 사이의 데이터를 취득하는 SQL문입니다.
COLUMN empno FORMAT 99999;
COLUMN ename FORMAT A6;
COLUMN hiredate FORMAT A10;
alter session set nls_date_format = 'YYYY/MM/DD';
SELECT empno, ename, hiredate FROM emp WHERE hiredate BETWEEN TO_DATE('1981/09/08', 'YYYY/MM/DD') AND TO_DATE('1981/11/17', 'YYYY/MM/DD');
실행 결과는 다음과 같습니다. 초과, 미만이 아닌 이상, 이하를 의미하기 때문에 1981/09/08, 1981/11/17를 포함하는 결과가 출력됩니다.
EMPNO ENAME HIREDATE
------ ------ ----------
7654 MARTIN 1981/09/28
7839 KING 1981/11/17
7844 TURNER 1981/09/08
Between And 대신 부등호(>=, <=)를 사용해 같은 결과를 취득할 수 있습니다.
COLUMN empno FORMAT 99999;
COLUMN ename FORMAT A6;
COLUMN hiredate FORMAT A10;
alter session set nls_date_format = 'YYYY/MM/DD';
SELECT empno, ename, hiredate FROM emp WHERE hiredate >= TO_DATE('1981/09/08', 'YYYY/MM/DD') AND hiredate <= TO_DATE('1981/11/17', 'YYYY/MM/DD');
EMPNO ENAME HIREDATE
------ ------ ----------
7654 MARTIN 1981/09/28
7839 KING 1981/11/17
7844 TURNER 1981/09/08
예시3
emp테이블에서 데이터 형식이 varchar2인 ename 컬럼의 데이터를 Between문을 사용해 첫 문자가 D인 데이터부터 첫번째 문자가 ‘K’와 일치하는 데이터 사이에 있는 데이터 취득하는 SQL문입니다.
COLUMN empno FORMAT 99999;
COLUMN ename FORMAT A6;
SELECT empno, ename FROM emp WHERE ename BETWEEN 'F' AND 'K';
실행 결과는 다음과 같습니다. 초과, 미만이 아닌 이상, 이하를 의미하기 때문에 첫글자가 ‘F’로 시작되는 데이터부터 ‘K’와 일치하는 데이터 사이의 결과가 출력됩니다. ‘KING’은 ‘K’보다 큰 값으로 인식하기 때문에 출력되지 않습니다.
EMPNO ENAME
------ ------
7566 JONES
7900 JAMES
7902 FORD
Between And 대신 부등호(>=, <=)를 사용해 같은 결과를 취득할 수 있습니다.
COLUMN empno FORMAT 99999;
COLUMN ename FORMAT A6;
SELECT empno, ename FROM emp WHERE ename >= 'D' AND ename <= 'K';
EMPNO ENAME
------ ------
7566 JONES
7900 JAMES
7902 FORD
주의사항1
부등호를 이용할 경우, 수학적인 방식으로는 데이터를 검색할 수 없습니다.
SQL> SELECT * FROM EMP WHERE 7654 <= EMPNO <= 7900;
SELECT * FROM EMP WHERE 7654 <= EMPNO <= 7900
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
주의사항2
[BETWEEN 상한값 AND 하한값]의 순서로는 검색할 수 없습니다.
SQL> SELECT * FROM EMP WHERE EMPNO BETWEEN 7900 AND 7654;
no rows selected