SQL - 문제 미리보기

문제 1665

medium
다음 Self Join 쿼리에서 `A.CustomerID <> B.CustomerID` 조건의 목적은?
```sql
SELECT A.CustomerName, B.CustomerName, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City;
```
A. 다른 도시의 고객을 찾기 위해
B. 자기 자신과의 매칭을 방지하기 위해
C. 성능을 향상시키기 위해
D. 중복된 CustomerID를 찾기 위해

정답: B


Self Join에서 자기 참조 방지의 필요성:
• Self Join 특성: 같은 테이블을 조인하므로 자기 자신과 매칭될 수 있음
• 불필요한 결과: "Alice와 Alice가 같은 도시에 산다"는 의미없는 결과
• 조건 필요: 자기 자신을 제외하는 조건 추가

조건 없을 때의 문제:
```sql
-- 자기 참조 방지 조건 없음
SELECT A.CustomerName, B.CustomerName, A.City
FROM Customers A, Customers B
WHERE A.City = B.City;

-- 결과에 포함되는 불필요한 레코드
CustomerName1 | CustomerName2 | City
Alice | Alice | Berlin ← 불필요
Alice | Bob | Berlin
Bob | Alice | Berlin
Bob | Bob | Berlin ← 불필요
```
조건 추가 후:
```sql
-- 자기 참조 방지 조건 추가
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City;

-- 의미있는 결과만 출력
CustomerName1 | CustomerName2 | City
Alice | Bob | Berlin
Bob | Alice | Berlin
```

💡 학습 팁

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