ORACLE의 EXSITS는 WHERE 절에서 조건에 부합하는
데이터를 조회하기 위해 주로 사용하는데,
EXISTS를 사용하는 이유와 사용 방법, 예시를 알아보자.
1) EXISTS
: 서브 쿼리 조건에 만족하는 모든 데이터를 반환하는 함수이다.
주로 WHERE 절에서 조건에 맞는 데이터를 찾기 위해 사용하며,
CASE 문에서 조건으로 사용할 수도 있다.
1-1) EXISTS 특징
- EXISTS는 결과에 부합하는 데이터를 출력,
NOT EXISTS는 결과에 부합하지 않는 데이터를 출력함 - 결과를 TRUE/FALSE로 반환하여 CASE문의 조건으로 사용 가능
- IN 함수에 비해 성능이 좋아 대용량 데이터에 용이함
2) NOT EXISTS
: EXISTS 함수와 반대로,
서브 쿼리 조건에 만족하지 않는 데이터들만 반환하는 함수이다.
3) 예시
예시는 아래의 임시 테이블을 활용하여 작성해보았다.
WITH EMP_TABLE AS (
SELECT '5020' AS EMP_NO, 'SCOOT' AS EMP_NM, '20120302' AS HIRE_DATE FROM DUAL
UNION ALL
SELECT '5004' AS EMP_NO, 'BLAKE' AS EMP_NM, '20100821' AS HIRE_DATE FROM DUAL
UNION ALL
SELECT '5001' AS EMP_NO, 'ANDREW' AS EMP_NM, '20100103' AS HIRE_DATE FROM DUAL
UNION ALL
SELECT '5038' AS EMP_NO, 'VICTORIA' AS EMP_NM, '20150617' AS HIRE_DATE FROM DUAL
UNION ALL
SELECT '5039' AS EMP_NO, 'MARY' AS EMP_NM, '20150617' AS HIRE_DATE FROM DUAL
UNION ALL
SELECT '5007' AS EMP_NO, 'JAMES' AS EMP_NM, '20100911' AS HIRE_DATE FROM DUAL
UNION ALL
SELECT '5024' AS EMP_NO, 'NICOLE' AS EMP_NM, '20120302' AS HIRE_DATE FROM DUAL
UNION ALL
SELECT '5003' AS EMP_NO, 'SMITH' AS EMP_NM, '20130810' AS HIRE_DATE FROM DUAL
),
SAL_TABLE AS (
SELECT '5020' AS EMP_NO, 2100 AS SAL FROM DUAL
UNION ALL
SELECT '5004' AS EMP_NO, 2100 AS SAL FROM DUAL
UNION ALL
SELECT '5001' AS EMP_NO, 2280 AS SAL FROM DUAL
UNION ALL
SELECT '5006' AS EMP_NO, 3100 AS SAL FROM DUAL
UNION ALL
SELECT '5038' AS EMP_NO, 2900 AS SAL FROM DUAL
UNION ALL
SELECT '5039' AS EMP_NO, 1460 AS SAL FROM DUAL
UNION ALL
SELECT '5007' AS EMP_NO, 1900 AS SAL FROM DUAL
UNION ALL
SELECT '5024' AS EMP_NO, 1820 AS SAL FROM DUAL
UNION ALL
SELECT '5003' AS EMP_NO, 2450 AS SAL FROM DUAL
)
SELECT A.*, B.SAL
FROM EMP_TABLE A
LEFT JOIN SAL_TABLE B
ON A.EMP_NO = B.EMP_NO
ORDER BY A.EMP_NO;
테이블 데이터
3-1) CASE WHEN EXISTS
예시
SELECT A.*,
CASE WHEN EXISTS ( SELECT 1
FROM EMP_TABLE B
WHERE A.EMP_NO = B.EMP_NO
AND HIRE_DATE LIKE '2010%'
) THEN 'Y' ELSE 'N' END AS FLAG
FROM SAL_TABLE A
결과값
3-2) WHERE EXISTS
예시
SELECT *
FROM SAL_TABLE A
WHERE A.SAL > 2400
AND EXISTS ( SELECT B.EMP_NO
FROM EMP_TABLE B
WHERE A.EMP_NO = B.EMP_NO
);
결과값
3-3) WHERE NOT EXISTS
예시
SELECT *
FROM SAL_TABLE A
WHERE A.SAL > 2400
AND NOT EXISTS ( SELECT B.EMP_NO
FROM EMP_TABLE B
WHERE A.EMP_NO = B.EMP_NO
);
결과값
[reference]
https://honeyteacs.tistory.com/53
https://sein-jh.tistory.com/176
'DataBase > Oracle' 카테고리의 다른 글
[Oracle] TRUNC 함수 사용법 및 예제(시간과 숫자를 절사하는 함수) (0) | 2025.06.12 |
---|---|
[Oracle] 숫자 3자리(천단위)마다 콤마(,) 넣어서 출력하기 (0) | 2025.06.10 |
[Oracle] PL/SQL 함수(Function) 작성법 (0) | 2025.06.05 |
[Oracle] OVER 함수 - GROUP BY 없이 최대,최소,평균 구하기 (1) | 2025.06.04 |
[Oracle] 특정 문자로 자릿수 채우기 LPAD, RPAD 함수 (0) | 2025.06.03 |