Oracle 비교 연산자 BETWEEN

Oracle DB

BETWEEN AND 연산자

범위선택검색 연산자입니다. 값의 하한과 상한을 지정하여 그 범위에 포함되는 데이터를 검색하여 결과값으로 표시합니다. [BETWEEN 하한값 AND 상한값] 대신 [대상컬럼 >= 하한값 AND 대상컬럼 <= 상한값]을 사용할 수 있습니다.

이 글의 예시는 아래 글의 초기 데이터를 사용했습니다.

Oracle 일반 데이터베이스 인스턴스에 연습 데이터용 샘플 스키마 "SCOTT" 작성하기
"SCOTT" 스키마가 디폴트로 설치된 마지막 오라클 버전은 11g(11.2.0.x) 입니다. 11g 버전 이후 Oracle 12c(12.1.0.2) 버전부터 "SCOTT" 스키마는 기본적으로 설치되지 않도록 변경되...

예시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をコピーしました