본문 바로가기
ETC/Study

[Database] EXISTS, IN 차이

by Youngs_ 2022. 9. 30.
실행순서
IN : 서브쿼리 -> 메인쿼리
EXIST : 메인쿼리 -> 서브쿼리

 

아래와같은 쿼리가 있다고 가정해보자

 

SELECT * FROM 메인쿼리 x
 	WHERE 1 = 1   
 AND x.id IN (서브쿼리)

1. IN 같은 경우는 서브쿼리를 먼저 실행한 후에 메인쿼리를 실행한다.

2. 그 후에 메인쿼리에서 하나의 row를 가져온 후에 그 row에서 가져온 id값을 서브쿼리와 하나씩 비교하고 만약 일치한다면 해당 row를 출력한다.

3. 2번을 반복하며 결과를 출력한다.


 

SELECT * FROM 메인쿼리 x
 	WHERE 1 = 1   
 AND x.id EXISTS (서브쿼리)

1. EXISTS 같은 경우는 메인쿼리를 먼저 실행하고 서브쿼리를 실행하여 row를 가져온다.

2. 해당 row에 대해 서브쿼리를 실행하며, 해당 서브쿼리에 대한 결과가 존재한다면 해당 row를 출력한다.

1번 ~ 2번을 반복하며 결과를 출력한다.

 

[일반적으로 서브쿼리 테이블에 데이터가 많으면 EXISTS 를 사용하는것이 좋다 .]  라고 한다 .  즉 , 일치하는  결과  있으면 서브쿼리를 더 이상 수행하지  않으므로 효율이 좋다고 하는건데 , EXISTS 를 사용하면 메인쿼리와 서브쿼리 의 조건이 연결되어 있고 매인쿼리당 서브쿼리가 실행되기 때문에 연결된 Column 의 Data 종류나 각  TABLE 의 Data 양에 따라서 어떤 조건절을 써야 하는지 신중하게 결정 해야 한다.

'ETC > Study' 카테고리의 다른 글

[Study] 안드로이드 면접 질문  (0) 2023.04.11
[Java] int, Integer 차이  (0) 2022.10.26
[Network] GET 방식, POST 방식  (0) 2022.09.05
[Java] static, final, static final의 차이점  (0) 2022.08.23
[디자인 패턴] MVC, MVP, MVVM 차이  (0) 2022.08.23

댓글