DB

[DB] MySQL IN과 EXISTS 차이

테런 2023. 9. 24. 23:53
  • MySQL IN과 EXISTS 차이
MySQL에서 `IN`과 `EXISTS`는 서로 다른 방식으로 데이터를 비교하는 데 사용되는 두 가지 다른 조건절입니다. 각각의 차이점과 어떤 상황에서 사용해야 하는지에 대해 설명하겠습니다.

1. IN 조건절은 지정된 값 목록과 비교하여 결과를 필터링하는 데 사용됩니다. 일반적으로 하나 이상의 값을 비교할 때 사용됩니다. 예를 들어, 다음 쿼리는 customers 테이블에서 customer_id가 1 또는 2 또는 3인 고객을 선택합니다.
SELECT * FROM customers WHERE customer_id IN (1, 2, 3);​

 

명시적인 값 목록을 비교하기 때문에 간단하고 직관적입니다.

2. EXISTS 조건절은 하위 쿼리의 결과에 따라 조건을 평가합니다. 즉, 하위 쿼리의 결과가 비어 있지 않으면 조건이 참이 되고, 그렇지 않으면 거짓이 됩니다. EXISTS는 서브쿼리의 결과에 따라 조건을 적용할 때 주로 사용됩니다. 예를 들어, 다음 쿼리는 orders 테이블에서 어떤 고객이 주문을 했는지를 확인합니다.
SELECT customer_id FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);​

 

서브쿼리의 결과에 따라 조건을 적용하기 때문에 더 복잡한 질의와 조인을 수행할 때 유용합니다. 요약하면, IN은 명시적인 값 목록을 비교하는 데 사용되며 간단한 비교에 적합하며, EXISTS는 서브쿼리의 결과에 따라 조건을 적용하는 데 사용되며 더 복잡한 질의와 관계형 데이터 모델에서 유용합니다. 어떤 것을 사용할지는 작업의 요구사항과 데이터 모델에 따라 다를 수 있습니다.

 

  • MySQL IN과 EXISTS 선택
일반적으로 EXISTS는 하위 쿼리에서 존재 여부를 확인하므로 데이터 양이 많고 인덱스가 있는 경우 효율적일 수 있습니다. IN은 일치하는 값을 찾는 데 사용되므로 데이터 양이 적거나 값 목록이 짧은 경우에 효율적일 수 있습니다. 하지만 최종 결정은 실제 데이터와 쿼리 실행 계획에 따라 달라집니다.