다음 두 쿼리의 결과 차이점을 올바르게 설명한 것은?

과목: MySQL

문제 번호: 3175

hard
다음 두 쿼리의 결과 차이점을 올바르게 설명한 것은?
-- 쿼리 A
SELECT SupplierName
FROM Suppliers
WHERE SupplierID IN (SELECT SupplierID FROM Products WHERE Price < 20);

-- 쿼리 B
SELECT SupplierName  
FROM Suppliers
WHERE EXISTS (SELECT 1 FROM Products 
              WHERE Products.SupplierID = Suppliers.SupplierID AND Price < 20);
A. 쿼리 A는 더 빠르고, 쿼리 B는 더 느립니다
B. 쿼리 A와 B는 완전히 동일한 결과를 반환합니다
C. 쿼리 A는 NULL 값 처리에서 다를 수 있지만, 이 경우에는 같은 결과를 반환합니다
D. 쿼리 A는 중복을 포함하고, 쿼리 B는 중복을 제거합니다

정답: C



⦁ 기본적으로는 같은 결과: 두 쿼리 모두 가격이 20 미만인 상품을 가진 공급업체를 조회합니다

⦁ NULL 값 처리의 차이:
⦁ IN 연산자: 서브쿼리 결과에 NULL이 있으면 예상과 다른 결과가 나올 수 있습니다
⦁ EXISTS: NULL 값 영향을 받지 않고 단순히 레코드 존재 여부만 확인합니다

⦁ 성능 차이:
⦁ EXISTS는 조건에 맞는 첫 번째 레코드를 찾으면 즉시 TRUE 반환 (Short-circuit)
⦁ IN은 서브쿼리의 모든 결과를 생성한 후 비교합니다

⦁ 이 예제에서는: SupplierID가 PRIMARY KEY라면 NULL이 없어 결과가 동일합니다

💡 학습 팁

이 문제를 포함한 MySQL 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.