IN&EXISTS 와 NOT IN&NOT EXISTS 의 최적화 원칙 요약
for x in ( select * from t1 )
loop
if ( exists ( select null from t2 where y = x.x )
then
OUTPUT THE RECORD
end if
end loop
주의:NOT EXISTS 와 NOT IN 은 완전히 교체 되 지 않 고 구체 적 인 수 요 를 볼 수 있 습 니 다.선택 한 열 이 비어 있 으 면 바 꿀 수 없습니다.예 를 들 어 다음 문장 을 보면 그들의 차 이 를 볼 수 있다.select x,y from t;x y---------1 3 1 2 1 1 1 3 5 select*from t where x not in(selection y from t t2)no rows select*from t where not exists(select null from t t2 where t2.y=t.x)x y---------------------------------------------------------------------------------select 키워드 뒤의 필드 에 not null 제약 이 있 거나 이러한 암시 가 있 을 때 not in 을 사용 합 니 다.또한 주 조회 에 표 가 크 고 하위 조회 에 표 가 작 지만 기록 이 많 으 면 not in 을 사용 하고 anti hash join 을 사용 해 야 합 니 다.주 조회 표 에 기록 이 적 고 하위 조회 표 에 기록 이 많 으 며 색인 이 있 으 면 not exists 를 사용 할 수 있 습 니 다.또한 not in 은/*+HASH 를 사용 하 는 것 이 좋 습 니 다.AJ*/또는 외부 연결+is null NOT IN 은 원가 기반 응용 에서 좋 습 니 다.예 를 들 어
select .....
from rollup R
where not exists ( select 'Found' from title T
where R.source_id = T.Title_ID);
select...from title T,rollup R where R.sourceid = T.Title_id(+) and T.Title_id is null; 또는(가)sql>select/*+HASHAJ */ ... from rollup R where ource_id NOT IN ( select ource_id from title T where ource_id IS NOT NULL)주의:위 에 서 는 이론 적 으로 몇 가지 건 의 를 했 을 뿐 가장 좋 은 원칙 은 여러분 이 위 에 있 는 기초 위 에서 실행 계획 을 사용 하여 분석 하여 가장 좋 은 문장의 쓰 기 를 얻 을 수 있다 는 것 입 니 다.'//=================================exists,not exists 총화 1 exists SELECT*FROM ankenm WHERE EXISTS( SELECT my_list_temp_m.sales_code FROM my_list_temp_m WHERE my_list_temp_m.sales_code=anken_m.sales_code)설명:1)anken 조회m 표 와 mylist_temp_m 표 에 모두 존재 하 는 salescode。 2) sales_code 는 ankenm 의 메 인 키,mylist_temp_m 의 외 키.주의:1)외부 조회 표 ankenm 는 조회 대상 이다.2)내부 조회 표 mylist_temp_m 는 조건 대상 이다.3)내외 층 의 조회 표 는 같 을 수 없다.4)관련 조건 으로 하 는 ankenm 표 는 내부 에서 FROM 을 조회 한 후에 추가 할 필요 가 없습니다.5) my_list_temp_m.sales_code=anken_m.sales_code 조건 의 좌우 순 서 는 조회 결과 에 영향 을 주지 않 습 니 다.2 not exists SELECT * FROM anken_m WHERE NOT EXISTS( SELECT my_list_temp_m.sales_code FROM my_list_temp_m WHERE my_list_temp_m.sales_code=anken_m.sales_code)설명:1)anken 조회m 표 에는 존재 하지만 mylist_temp_m 표 에 존재 하지 않 는 salescode。 2) sales_code 는 ankenm 의 메 인 키,mylist_temp_m 의 외 키.주의:1)외부 조회 표 ankenm 는 조회 대상 이다.2)내부 조회 표 mylist_temp_m 는 조건 대상 이다.3)내외 층 의 조회 표 는 같 을 수 없다.4)관련 조건 으로 하 는 ankenm 표 는 내부 에서 FROM 을 조회 한 후에 추가 할 필요 가 없습니다.5) my_list_temp_m.sales_code=anken_m.sales_code 조건 의 좌우 순 서 는 조회 결과 에 영향 을 주지 않 습 니 다.3 UPDATE anken 종합 운용m SET(plan_type_code, branch_name, business_type_code) =(SELECT anken.plan_type_code,anken.branch_name,anken.business_type_code FROM anken WHERE anken.sales_code=anken_m.sales_code) WHERE EXISTS ( SELECT anken.sales_code FROM anken,my_list_temp_m WHERE my_list_temp_m.sales_code=anken.sales_code AND anken.sales_code=anken_m.sales_code)설명:1)한 표 의 기록 데이터 로 다른 표 의 기록 데 이 터 를 업데이트 합 니 다.2)SQL 문 구 를 일괄 업데이트 합 니 다.2) sales_code 는 anken,ankenm 의 메 인 키,mylist_temp_m 의 외 키.주의:1)set 문장의 업 데 이 트 될 필드 는 데이터 원본 필드 와 일일이 대응 해 야 하 며,또한 데이터 원본 조회 의 조건 은 하나의 기록 을 한정 해 야 합 니 다.즉,salescode 는 anken 의 기록 과 anken 을 유일 하 게 확인 할 수 있 습 니 다.m 의 기록 은 업 데 이 트 될 기록 과 데이터 원본 기록 의 메 인 키 가 같다 는 것 을 보증 할 수 있 습 니 다.2)WHERE EXISTS 구문 에 따라 데이터 원본 기록 의 범 위 를 확인 할 수 있 습 니 다.즉,anken 표 에 있 는 어떤 기록 으로 anken 을 업데이트 할 수 있 습 니까?시계그래서 ankenm 는 WHERE EXISTS 문구 에 있 는 FROM 뒤에 추가 할 필요 가 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JSP 개발 의 THE SERVLET NAME ALREADY EXISTS.해결 방법servlet name already exists.해결 방법 우리 가 같은 이름 의 servlet 파일 을 만 든 후에 그것 을 삭제 한 후에 같은 이름 으로 servlet 을 만 들 때 잘못 보고 할 것 이다. 해...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.