SQLDSQL 활용난이도 3MCQ

SQLD SQL 활용 기출문제 #1289

문제

다음과 같은 환경에서 조인 조건이 명시적이지 않아 스키마 변경 시 의도치 않은 결과가 발생할 위험이 가장 큰 SQL 구문은?

테이블 ORDERS (10만건), CUSTOMERS (1만건) ORDERS.CUSTOMER_ID에 인덱스 없음 CUSTOMERS.CUSTOMER_ID는 PK

① SELECT * FROM ORDERS WHERE CUSTOMER_ID IN (SELECT CUSTOMER_ID FROM CUSTOMERS WHERE REGION = 'ASIA') ② SELECT * FROM ORDERS O, CUSTOMERS C WHERE O.CUSTOMER_ID = C.CUSTOMER_ID AND C.REGION = 'ASIA' ③ SELECT * FROM ORDERS WHERE EXISTS (SELECT 1 FROM CUSTOMERS WHERE CUSTOMER_ID = ORDERS.CUSTOMER_ID AND REGION = 'ASIA') ④ SELECT * FROM ORDERS NATURAL JOIN CUSTOMERS WHERE REGION = 'ASIA'

정답

4

해설

④가 정답입니다. NATURAL JOIN은 두 테이블에서 이름이 같은 모든 컬럼을 자동으로 조인 조건으로 사용합니다. 이로 인해 (1) CUSTOMER_ID 외의 동명 컬럼(예: CREATED_DATE 등)이 추가되면 의도하지 않은 컬럼이 조인 조건에 포함되어 결과가 달라지고, (2) 조인 조건이 스키마에 암묵적으로 의존하므로 컬럼 추가/변경 시 쿼리가 조용히 깨질 수 있으며, (3) 동명 컬럼이 하나도 없으면 Cartesian Product가 발생합니다. ①②③은 모두 조인 조건을 명시적으로 기술하므로 유지보수 측면에서 안전합니다.

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

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

[SQLD] SQL 활용 기출 #1289 | sqldpass