programing

'존재하지 않음'과 '존재하지 않음'의 차이점은 무엇입니까?

lastmoon 2023. 7. 6. 22:29
반응형

'존재하지 않음'과 '존재하지 않음'의 차이점은 무엇입니까?

사이에 무슨 차이가 있습니까?not in그리고.not exists오라클 쿼리에서?

사용 시기not in그리고not exist?

존재하지 않는 곳과 존재하지 않는 곳의 차이가 명확해집니다.NULL값을 입력합니다.

예:

create table test_a (col1 varchar2(30 char));
create table test_b (col1 varchar2(30 char));

insert into test_a (col1) values ('a');
insert into test_a (col1) values ('b');
insert into test_a (col1) values ('c');
insert into test_a (col1) values ('d');
insert into test_a (col1) values ('e');

insert into test_b (col1) values ('a');
insert into test_b (col1) values ('b');
insert into test_b (col1) values ('c');
insert into test_b (col1) values (null);

참고: 주요 차이점은test_b포함null가치.

select * from test_a where col1 not in (select col1 from test_b);

반환된 행 없음

select * from test_a where 
    not exists
        (select 1 from test_b where test_b.col1 = test_a.col1);

돌아온다

col1
====
d
e

저는 그것이 같은 목적을 가지고 있다고 생각합니다.

not in또한 문자 그대로의 값을 취할 수 있는 반면에not exists결과를 비교할 쿼리가 필요합니다.

편집:not exists사용할 수 있기 때문에 사용하기 좋을 수 있습니다.join기준에서 인덱스된 열을 사용하는 경우 외부 쿼리를 사용하여 인덱스를 사용할 수 있습니다.

EDIT2: 이 질문도 참조하십시오.

EDIT3: 위의 것들을 취소하겠습니다.
이 링크를 참조하십시오.DB가 이를 어떻게 번역하느냐에 따라 데이터베이스/인덱스 등에 따라 달라질 수 있다고 생각합니다.

성능 차이가 있을 수 있으며, 속도가 더 빠릅니다.

가장 중요한 차이점은 null 처리입니다.쿼리는 내부 및 기존 모두에서 동일하게 작동하는 것처럼 보이지만 하위 쿼리가 null을 반환하면 쇼크가 발생할 수 있습니다.

null 원인이 존재하면 실패할 수 있습니다.

각각의 사용 시기에 대한 더 나은 설명은 Joe Celko의 'SQL for Smarties'를 참조하십시오.

에서 요소 집합에 있는 요소의 존재 여부를 테스트하지 않으므로 더 간단합니다.

존재하지 않음 그룹화(예: sum(x)=z 또는 count(") >3"), 여러 조건의 결과(예: 여러 요소 일치)를 포함하여 더 복잡한 쿼리를 처리할 수 있으며 인덱스를 활용할 수 있습니다.

없는 것이 없는 것보다 쉬운 경우도 있습니다.일반적으로 여기서 일련의 값에서 키 필드의 값을 테스트합니다.

경험상, 저는 없는 것보다 훨씬 더 많은 상황을 포함하기 때문에 존재하지 않는 것을 선호합니다.존재하지 않음은 에 사용되지 않는 모든 상황에 사용할 수 있지만 그 반대는 사용할 수 없습니다.

언급URL : https://stackoverflow.com/questions/1699424/whats-the-difference-between-not-in-and-not-exists

반응형