본문 바로가기

IT

exists

http://skcblue.tistory.com/187 <-출처



오라클 exist, not exists


select * from A
where not exists (select * from B
                 where A.c1 = B.c1)
=> A가 B에 존재하지 않는 것을 조회

 

select * from A
where exists (select * from B
                 where A.c1 = B.c1)
=> A가 B에 존재하는 것을 조회 









출처:http://dedup.me/blog/?p=27

자료의 존재여부를 조건으로 사용하기 위하여는 EXISTS를 사용합니다.

[NOT] EXISTS (SELECT 문)SELECT문을 사용한 서브쿼리의 결과 행이 1행이상 존재할때 TRUE로 간주합니다.

IN을 사용할때 보다, EXISTS를 사용하는 편이 성능을 크게 향상될 때가 있으므로 IN을

사용할 때에는 EXISTS로 대체 할수 있는지 검토합니다.

emp테이블

 SQL> select * from emp;

EMP DEP NAME     SALARY
— —  ———- ———-
E01 D01 name1    96
E02 D01 name2    105
E03 D02 name3    300

SQL>

dept테이블

 SQL> select * from dept;

DEP DEPT_NAME
— ———-
D01 총무
D02 영업
D03 개발
D05
D04 영업

emp테이블의 열dept_id가 ‘D03′인 자료가 있으면 테이블을 검색함.(EXISTS)

SQL> select * from dept
2   where exists( select ‘X’ from emp where dept_id = ‘D03′ );

->검색결과가 없음.

위의 X는 EXISTS를 사용할때의 관례.

 

emp테이블의 열dept_id가’D03′인 자료가 있으면 dept테이블을 검색함.(NOT EXISTS)

 SQL> select * from dept
2   where not exists( select ‘X’ from emp where dept_id = ‘D03′ );

DEP DEPT_NAME
— ———-
D01 총무
D02 영업
D03 개발
D05
D04 영업

 

 dept테이블의 열 dept_id의 자료가 emp테이블의 열dept_id에 있는 자료를 검색.(EXISTS)

SQL> select * from dept A
2    where exists( select ‘X’ from emp B where A.dept_id = B.dept_id );

DEP DEPT_NAME
— ———-
D01 총무
D02 
영업

 

 dept테이블의 열 dept_id의 자료가 emp테이블의 열dept_id에 없는 자료를 검색.(EXISTS)

SQL> select * from dept A
2    where not exists( select ‘X’ from emp B where A.dept_id = B.dept_id );

DEP DEPT_NAME
— ———-
D04 영업
D03 개발
D05

 

'IT' 카테고리의 다른 글

Left0721  (0) 2016.07.21
exists  (0) 2016.07.19
너무나 도움되는 join 설명  (0) 2016.07.19
조건식  (0) 2016.07.12
CRUD  (0) 2016.07.06