SQLDSQL 활용서브쿼리난이도 2MCQ

SQLD 서브쿼리 기출문제 #30

문제

다음 상관 서브쿼리를 일반 서브쿼리로 변환한 것으로 가장 적절한 것은?

SQL
SELECT 상품명 FROM 상품 A WHERE EXISTS (SELECT 1 FROM 주문 B WHERE A.상품코드=B.상품코드 AND B.주문일자>='2024-01-01');

① SELECT 상품명 FROM 상품 WHERE 상품코드 IN (SELECT 상품코드 FROM 주문 WHERE 주문일자>='2024-01-01') ② SELECT 상품명 FROM 상품 WHERE 상품코드 = ANY (SELECT 상품코드 FROM 주문 WHERE 주문일자>='2024-01-01') ③ SELECT 상품명 FROM 상품 WHERE 상품코드 NOT IN (SELECT 상품코드 FROM 주문 WHERE 주문일자>='2024-01-01') ④ SELECT DISTINCT 상품명 FROM 상품 WHERE 상품코드 IN (SELECT DISTINCT 상품코드 FROM 주문 WHERE 주문일자>='2024-01-01')

정답

4

해설

① 부분적으로 맞음: EXISTS를 IN으로 변환한 것은 맞지만, EXISTS는 자동으로 중복을 제거하는 반면 IN은 중복된 결과를 반환할 수 있어 완전히 동일하지 않습니다. ② 틀림: = ANY는 IN과 기능적으로 동일하지만 여전히 중복 문제가 있고, 일반적으로 사용되지 않는 표현입니다. ③ 틀림: NOT IN은 EXISTS의 반대 조건으로 완전히 다른 결과를 반환합니다. ④ 정답: EXISTS는 조건을 만족하는 행의 존재 여부만 확인하므로 자연스럽게 중복이 제거됩니다. 따라서 정확한 변환을 위해서는 DISTINCT를 사용하여 중복을 제거해야 하며, 서브쿼리에서도 DISTINCT를 사용하여 성능을 최적화할 수 있습니다.

이런 문제 20~50개를 한 번에 풀어보세요

매번 새로 추가되는 모의고사 + 오답 자동 복습 + 회차별 실력 추적. 회원가입 후 무료 이용.

[SQLD] 서브쿼리 SQL 활용 기출 #30 | sqldpass