Today I Learned
in & exists 그리고 any & all 본문
in & exists
1. in
- '=' 비교만 가능(부등호가 들어가는 비교는 안되는듯), or 조건의 검색 결과 내용을 가져온다
- 괄호안 서브쿼리가 먼저 실행되고 그 결과값을 바탕으로 앞의 쿼리문을 실행
- select * from emp where deptno in (select deptno from dept where loc = 'LA' or loc = 'BOSTON');
2. exists(엑시스트)
- (기본적으로 IN과 같으나 참/거짓 반환) 이라고 예전에 배움
- 메인쿼리 비교조건이 서브쿼리의 결과중에 '만족하는 값이 하나라도 있으면 참(1)/거짓(0) 반환
- 메인쿼리를 먼저 실행하고 그다음 서브쿼리 실행
+ exists 를 사용하여 select * from emp where deptno in (select deptno from dept where loc = 'LA' or loc = 'BOSTON'); 과 같은 결과를 내려면? +
*일반적으로 exists 는 in보다 성능이 좋다
그 이유는 순서를 보면 알 수 있음. (데이터를 가져오는 것과 검색은 다름)
- in의 경우 서브쿼리에서 검색(in) 이후 그 결과를 가지고 메인쿼리에서 또다시 검색(where)이 진행된다.
- Exists는 메인쿼리에서 모든 데이터를 다 가져온후 (검색과정이 없음) 서브쿼리에서 검색을 진행 한다. 점점 줄여가는 형태
- 성능은 일반적으로 1만건 이상의 데이터에서 고려하자
- 데이터가 많을 경우 일단 내가 더 편한걸로 쿼리문 in 으로 작성 후 수정 필요하다고 주석처리하자
*In 과 exists 차이점
순서차이
성능 차이
any & all
1. any
기본적으로 in과 비슷함 (or 조건 )
- =any는 in과 같음
select * from emp where deptno in (select deptno from dept where loc = 'LA' or loc = 'BOSTON');
select * from emp where deptno = any (select deptno from dept where loc = 'LA' or loc = 'BOSTON');
- > any : 최소값 보다 크면
- < any : 최대값 보다 작으면
2. All
- (서브쿼리의 결과 중에서 모든 값이 일치 하면 참 : 이거 조건 다 맞아? 확인할때?) 예전에 잠깐 배울 때
- All 은 any 와 모든게 반대
- And 조건 (any는 or 조건)
- 서브쿼리 안의 결과값이서브쿼리 안의 값이 무조건 1개이어야 한다. 1개 이상이 나오면 실행이 안된다.
- > all : 최대값보다 크면
- < all : 최소값보다 작으면
_11