Friday, 9 December 2016

IN, NOT IN


IN operator retrieves the rows whose column value is in a list.

CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,
                      ENAME VARCHAR2(10),
                      HIREDATE DATE);

INSERT INTO EMP VALUES (1, 'SMITH', TO_DATE('17-DEC-1980', 'DD-MON-YYYY'));
INSERT INTO EMP VALUES (2, 'ALLEN', TO_DATE('20-FEB-1981', 'DD-MON-YYYY'));
INSERT INTO EMP VALUES (3, 'WARD',  TO_DATE('22-FEB-1981', 'DD-MON-YYYY'));
INSERT INTO EMP VALUES (4, 'JONES', TO_DATE('2-APR-1981',  'DD-MON-YYYY'));
INSERT INTO EMP VALUES (5, 'MARTIN',TO_DATE('28-SEP-1981', 'DD-MON-YYYY'));


SQL> SELECT *
  2  FROM emp
  3  WHERE empno IN (2, 3, 5);

     EMPNO ENAME      HIREDATE
---------- ---------- ---------
         2 ALLEN      20-FEB-81
         3 WARD       22-FEB-81
         5 MARTIN     28-SEP-81

SQL>
NOT IN reverses the IN operator:

SQL> SELECT *
  2  FROM emp
  3  WHERE empno NOT IN (2, 3, 5);

     EMPNO ENAME      HIREDATE
---------- ---------- ---------
         1 SMITH      17-DEC-80
         4 JONES      02-APR-81

SQL>

NULL value and IN operator

NOT IN returns false if a value in the list is null.

SQL> SELECT *
  2  FROM emp
  3  WHERE empno NOT IN (2, 3, 5, NULL);

no rows selected

SQL>