Not Exists - Boolean 값을 반환.
- 서브 쿼리가 결과를 반환하는지 여부를 TRUE, FALSE로 표현한다.
- 서브 쿼리의 데이터가 존재하지 않을 경우 데이터가 조회된다.
그래서 내가 작성한 쿼리는 공통된 ID를 찾는 쿼리로 데이터가 조회된다. 따라서 Exists에서는 값이 나오지만 Not Exists에서는 나오지 않게 된다.
SQL 고득점 Kit - 8.14
inner join의 서브 쿼리 결과는 다음과 같다.
- 여기서 결국 1, 3, 5라는 값만 존재하고 나머지는 원래 없는 것으로 보는 것이다.
- 따라서, 서브 쿼리에서 존재하지 않는 데이터를 조회해야 하는데 존재하지 않는 데이터가 없기 때문에 Not를 사용하면 결과가 안 나오고 Not을 사용하지 않으면 1, 3, 5 결과가 나오는 것이다.
그렇다면 왜 where a.id = b.id를 통해서 나온 결과는 서브 쿼리가 없다고 하여 데이터가 나올까?
예시로 where은 다음과 같은 결과가 출력이 된다. 왜냐 둘의 id가 같은 것의 조건이니 Boolean으로 나옴.
- Exists로 결과를 출력하면 1, 3, 5로 결과가 나온다.
- Not Exists로 결과를 출력하면 2, 4로 결과가 나온다.
- Where을 두 테이블을 비교하여 둘이 동일한 것만 출력하는 쿼리인데 그렇기 때문에 동일하지 않는 결과도 가지고 있다. 그래서 Not Exists를 사용했을 때 결과가 나올 수 있다. 데이터가 존재하지 않기 때문
| a.id | b.id | 서브 쿼리 |
|---|
| 1 | 1 | True |
| 2 | | False |
| 3 | 3 | True |
| 4 | | False |
| 5 | 5 | True |