실행순서
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 |
댓글