Oracle 논리 연산자 NOT

Oracle DB

논리 연산자 NOT

어떤 조건식을 부정하는 연산자. 조건식이 거짓일 경우, TRUE를 반환합니다.
조건식 앞에 NOT을 기술하며 NOT으로 부정하는 조건식의 범위를 명확하게 하기 위해 괄호로 감쌀 수 있습니다.

비교연산자 BETWEEN, IN, LIKE, IS NULL를 사용한 SQL문의 부정 또한 하단의 예시를 통해 알아보겠습니다.

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

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

예시1

기본적인 부정 SQL문입니다. 조건을 부정하기 때문에 NOT은 WHERE의 뒤에 위치합니다.
emp 테이블의 deptno컬럼의 데이터가 30인 데이터 이외의 결과를 취득합니다.

COLUMN empno FORMAT 99999;
COLUMN ename FORMAT A6;
COLUMN deptno FORMAT 999999;
SELECT empno, ename, deptno FROM emp WHERE NOT deptno = 30; 

실행 결과는 다음과 같습니다. deptno가 10, 20인 데이터만 출력됩니다.

  EMPNO ENAME   DEPTNO
------ ------ -------
  7369 SMITH       20
  7566 JONES       20
  7782 CLARK       10
  7839 KING        10
  7902 FORD        20
  7934 MILLER      10

6 rows selected.

예시2

BETWEEN 연산자를 사용한 부정 SQL문입니다. [대상 컬럼 NOT BETWEEN 하한치 AND 상한치]처럼 BETWEEN문의 앞에 NOT이 위치합니다.
emp 테이블의 mgr컬럼의 데이터가 7500 이상, 7800 이하인 데이터 이외의 결과를 취득합니다.

COLUMN empno FORMAT 99999;
COLUMN ename FORMAT A6;
COLUMN mgr FORMAT 9999;
SELECT empno, ename, mgr FROM emp WHERE mgr NOT BETWEEN 7500 AND 7800; 

실행 결과는 다음과 같습니다. mgr이 7800 초과인 데이터만 출력됩니다.(7500 미만의 데이터는 존재하지 않아 출력되지 않았습니다. 7500 미만인 데이터가 존재했다면 함께 출력됩니다.)

 EMPNO ENAME    MGR
------ ------ -----
  7369 SMITH   7902
  7566 JONES   7839
  7698 BLAKE   7839
  7782 CLARK   7839

예시3

IN 연산자를 사용한 부정 SQL문입니다. [대상 컬럼 NOT IN(값1, 값2, 값3, ……)]처럼 IN의 앞에 NOT이 위치합니다.
emp 테이블의 job컬럼의 데이터가 ‘SALESMAN’, ‘MANAGER’, ‘PRESIDENT’인 데이터 이외의 결과를 취득합니다.

COLUMN empno FORMAT 99999;
COLUMN ename FORMAT A6;
SELECT empno, ename, job FROM emp WHERE job NOT IN('SALESMAN', 'MANAGER', 'PRESIDENT');

실행 결과는 다음과 같습니다. job이 CLERK, ANALYST인 데이터만 출력됩니다.

 EMPNO ENAME  JOB
------ ------ ---------
  7369 SMITH  CLERK
  7900 JAMES  CLERK
  7902 FORD   ANALYST
  7934 MILLER CLERK

예시4

LIKE 연산자를 사용한 부정 SQL문입니다. [대상 컬럼 NOT LIKE ‘문자 패턴’]처럼 LIKE의 앞에 NOT이 위치합니다.
emp 테이블의 job컬럼의 데이터에 문자 ‘L’이 포함된 데이터 이외의 결과를 취득합니다.

COLUMN empno FORMAT 99999;
COLUMN ename FORMAT A6;
SELECT empno, ename, job FROM emp WHERE job NOT LIKE '%L%';

실행 결과는 다음과 같습니다. job의 문자열에 L이 포함되지 않은 값인 MANAGER, PRESIDENT를 가진 데이터만 출력됩니다.

 EMPNO ENAME  JOB
------ ------ ---------
  7566 JONES  MANAGER
  7698 BLAKE  MANAGER
  7782 CLARK  MANAGER
  7839 KING   PRESIDENT

예시5

IS NULL 연산자를 사용한 부정 SQL문입니다. [대상 컬럼 IS NOT NULL]처럼 IS와 NULL 사이에 NOT이 위치합니다.
emp 테이블의 comm컬럼의 데이터중 NULL 데이터 이외의 결과를 취득합니다.

COLUMN empno FORMAT 99999;
COLUMN ename FORMAT A6;
COLUMN comm FORMAT 9999;
SELECT empno, ename, comm FROM emp WHERE comm IS NOT NULL;

실행 결과는 다음과 같습니다. comm이 0, 300, 500, 1400처럼 NULL이 아닌 값을 가진 데이터만 출력됩니다.

 EMPNO ENAME   COMM
------ ------ -----
  7499 ALLEN    300
  7521 WARD     500
  7654 MARTIN  1400
  7844 TURNER     0
제목과 URL을 복사했습니다