Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Today I Learned

in & exists 그리고 any & all 본문

DB

in & exists 그리고 any & all

꾸주니12 2022. 5. 2. 22:59

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

'DB' 카테고리의 다른 글

뷰(View)  (0) 2022.05.06
인덱스  (0) 2022.05.06
집합  (0) 2022.05.01
조인(Join)  (0) 2022.05.01
서브쿼리, count함수, 상하관계쿼리  (0) 2022.05.01