MySQL

15. EXISTS : 조건에 해당하는 ROW의 존재 유무 확인

newness 2023. 7. 27. 11:35

EXISTS

  • 조건에 해당하는 ROW의 존재 유무를 확인
  • 'SELECT 절'까지 수행하지 않기 때문에 In에 비해 속도나 성능면에서 더 좋음
  • EXISTS는 WHERE 절에서 주로 사용하며, WHERE 절에서 IN을 사용하는 것과 같은 결과를 주며, JOIN Query로도 동일한 결과를 낼 수 있음
  • 해당하는 데이터가 없는 경우를 찾을 때는 NOT EXISTS 를 사용할 수 있음
  • IN의 경우 실제 존재하는 데이터의 값을 비교하기 때문에 EXISTS 보다 속도가 느린 경우가 있음

 

예시

TABLE: team_epl

 - EPL 팀

no name
1 Arsenal
2 Liverpool
3 Manchester United
4 Manchester City
5 Chelsea
6 Tottenham
7 Newcastle
... ...

 

TABLE: team_ucl_winner

 - 챔피언스리그 우승팀

no name year
1 Real Madrid ...
2 AC Milan ...
3 Liverpool ...
4 FC Barcelona ...
5 Bayern Munich ...
6 Manchester United ...
7 Chelsea ...
8 Manchester City ...
... ... ...

 

쿼리 예시

 - EPL 팀 중 챔피언스리그 우승팀을 구해보자

 

WHERE ~ IN 을 쓸 경우
SELECT E.name FROM team_epl AS E
WHERE E.name IN (SELECT DISTINCT UW.name FROM team_ucl_winner AS UW);

 

JOIN 을 쓸 경우
SELECT E.name FROM team_epl AS E
JOIN team_ucl_winner AS UW ON E.name = UW.name;

 

WHERE ~ EXISTS 를 쓸 경우
SELECT E.name FROM team_epl AS E
WHERE EXISTS (SELECT * FROM team_ucl_winner AS UW WHERE E.name = UW.name);

 

 

세 쿼리 모두 동일한 결과가 출력된다.

 

Query Result

name
Liverpool
Manchester United
Chelsea
Manchester City