SELECT ENAME, SAL, JOB
FROM EMP
WHERE EMPNO != (SELECT MGR
FROM EMP);
※ 단일행 서브 쿼리의 연산자를 사용하면 에러가 발생함
ORA-01427: single-row subquery returns more than one row
→ 다중 행 서브 쿼리 중 NOT IN을 사용하여 문제 해결
SELECT ENAME, SAL, JOB
FROM EMP
WHERE EMPNO NOT IN (SELECT MGR
FROM EMP);
SELECT ENAME, SAL, JOB
FROM EMP
WHERE EMPNO != 7839 AND EMPNO != 7698 AND EMPNO != 7902 AND EMPNO != 7566
AND EMPNO != 7566 AND EMPNO != 7788 AND EMPNO != 7782 AND EMPNO != NULL;
→ 위 SQL의 결과는 NULL(전체가 NULL이 되어 결과가 출력되지 않음)
→ 따라서 서브 쿼리문에서 NOT IN을 사용할 때는 반드시 서브 쿼리문에서 메인 쿼리문으로 NULL 값이 리턴되지 않게 해야 함
ENAME | SAL | JOB |
---|---|---|
TURNER | 1500 | SALESMANN |
WARD | 1250 | SALESMANN |
MARTIN | 1250 | SALESMANN |
ALLEN | 1600 | SALESMANN |
MILLER | 1300 | CLERK |
SMITH | 800 | CLERK |
ADAMS | 1100 | CLERK |
JAMES | 950 | CLERK |
SELECT *
FROM DEPT D
WHERE EXISTS (SELECT *
FROM EMP E
WHERE D.DEPTNO = E.DEPTNO);
SELECT *
FROM DEPT D
WHERE NOT EXISTS (SELECT *
FROM EMP E
WHERE D.DEPTNO = E.DEPTNO);