Oracle 비교 연산자 BETWEEN

Oracle DB

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

제목과 URL을 복사했습니다