OS환경 : Oracle Linux 7.6 (64bit)
DB 환경 : Oracle Database 19.10.0.0
방법 : 오라클 19c not in 절에 null 허용 컬럼 관련 테스트
오라클에서 아래와 같은 샘플데이터가 있을때 not in 절로 해당 데이터를 확인하는 쿼리로 테스트해봄
현재 아래 테이블에는 각각 1~8까지 데이터가 동일하게 들어있고, tab_1 테이블에만 111이라는 추가 데이터가 들어있음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
SQL>
drop table tab_1;
drop table tab_2;
drop table tab_3;
drop table tab_4;
create table tab_1 (col_1 number);
insert into tab_1 values (1);
insert into tab_1 values (2);
insert into tab_1 values (3);
insert into tab_1 values (4);
insert into tab_1 values (5);
insert into tab_1 values (6);
insert into tab_1 values (7);
insert into tab_1 values (8);
insert into tab_1 values (NULL);
commit;
create table tab_2 as select * from tab_1;
create table tab_3 as select * from tab_1;
create table tab_4 as select * from tab_1;
insert into tab_1 values (111);
commit;
|
여기서 tab_2, tab_3, tab_4 를 union all 하여 col_1 값이 tab_1에 있는지 체크하는 쿼리 수행
아래 쿼리대로라면 tab_2, tab_3, tab_4 에 존재하는 1~8은 안나오고 111만 나와야함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SQL>
select col_1 from tab_1
where col_1 not in
(
select col_1 from tab_2 where col_1 is not null
union all
select col_1 from tab_3 where col_1 is not null
union all
select col_1 from tab_4 where col_1 is not null
);
COL1
----------
0
|
하지만 데이터가 0으로 나옴
이유는 NULL 조건에 있음
tab_1~4까지 모두 col_1 컬럼이 null 허용 컬럼임
null은 in이나 not in 절, = 등으로 비교가 되지 않기 때문에 꼭 is not null, is null 등으로 비교해줘야함
위 쿼리에서 서브쿼리에 모두 col_1 is not null을 넣은 후 다시 조회
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL>
select col_1 from tab_1
where col_1 not in
(
select col_1 from tab_2 where col_1 is not null
union all
select col_1 from tab_3 where col_1 is not null
union all
select col_1 from tab_4 where col_1 is not null
);
COL1
----------
111
|
정상적으로 tab_1에만 존재하는 111이 나옴
NULL 허용 컬럼으로 조회시 이 점을 유의해서 sql을 작성해야함
참조 :
'ORACLE > Performance Tuning ' 카테고리의 다른 글
오라클 19c ash 뷰 데이터 1분마다 백업하는 스크립트 (0) | 2023.12.07 |
---|---|
오라클 19c 10046 trace 및 tkprof 자동수행 스크립트 (0) | 2023.12.07 |
오라클 19c 병렬 dml 실행계획 확인 테스트 (0) | 2023.03.05 |
오라클 19c leading use_nl 힌트 제어 테스트 (0) | 2023.03.04 |
오라클 19c nl 조인 순서 제어 테스트 (0) | 2023.03.03 |