Posted
Filed under DataBase/Oracle
Oracle SQL에서 WHERE 절에 조건을 걸 때, NULL 값이 포함된 컬럼은 왜 조회되지 않을까요? 특히 =나 LIKE 조건을 사용하면 NULL인 행이 결과에서 빠지는 이유와 이를 처리하는 방법을 정리했습니다.

1. NULL은 비교 연산에서 항상 FALSE 또는 UNKNOWN

SQL에서 NULL은 "값이 없음"을 뜻합니다.
그래서 다음 조건들은 모두 FALSE 또는 UNKNOWN으로 처리됩니다.
 
 - 컬럼 = NULL → 항상 FALSE (실제로는 UNKNOWN)
 - 컬럼 LIKE '%' → 컬럼이 NULL이면 결과는 UNKNOWN
 
따라서 WHERE 컬럼 = 'abc' 조건은 컬럼이 NULL인 행을 전혀 포함하지 않습니다.
2. NULL 값을 정확히 조회하려면 IS NULL 사용
NULL을 직접 조회할 때는 반드시 IS NULL 조건을 사용해야 합니다.

 SELECT * FROM 테이블명 WHERE 컬럼 IS NULL;
 
컬럼 = NULL은 절대 쓰면 안 됩니다.

3. NULL 포함 조회 방법
예를 들어, 컬럼이 'abc'이거나 NULL인 행 모두 조회하려면:
SELECT * FROM 테이블명 WHERE 컬럼 = 'abc' OR 컬럼 IS NULL;
 
마찬가지로, LIKE 조건과 NULL 포함 조회는 이렇게 씁니다:
SELECT * FROM 테이블명 WHERE 컬럼 LIKE '%패턴%' OR 컬럼 IS NULL;


4. NVL 함수를 활용한 NULL 처리
NVL 함수는 NULL 값을 다른 값으로 대체합니다. 예를 들어:
WHERE NVL(컬럼, '대체값') LIKE '%패턴%'
 
이때 주의할 점은 NVL(컬럼, '%') LIKE '%' 처럼 사용하면 NULL도 포함되지만, 조건 자체가 항상 참이 되어 버려 실질적인 필터링 의미가 없어집니다.

정리
 - NULL은 비교 연산자(=, LIKE 등)에서 항상 제외된다.
 - NULL을 조회하려면 IS NULL을 꼭 써야 한다.
 - NULL 포함 조건은 OR 컬럼 IS NULL을 추가하거나 NVL로 처리 가능하나, 무조건 참이 되지 않도록 주의해야 한다.
2025/07/27 15:45 2025/07/27 15:45
Posted
Filed under DataBase/Oracle

오라클에서 실수로 테이블에 있는 내용들을
DELETE FROM 하여 지워지지 말아야 하는 자료를 삭제 하고 커밋(Commit) 을 하여 지워 버렸다면,

ORACLE 에서 timestamp 를 이용하여 삭제 전의 데이터를 조회 하여 복구 할 수 있습니다.

SELECT
*
FROM 지워버린테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE)
(WHERE 조건 )

으로 조회 하면 10분전 상황의 데이터가 조회가 됩니다.
(MINUTE 대신 HOUR, SECOND 등도 사용 할 수 있습니다.)

[참고사항]

오라클 환경 설정에 따라서 복구가능한 시간이 달라 질 수 있습니다. 무조건 3 HOUR 해도 환경에 따라 3시간 전 상황으로 복구가 불가능 할 수도 있습니다 [ORA-01555] 오류발생

2020/09/18 21:07 2020/09/18 21:07