SQL - 문제 미리보기
문제 1666
medium
다음 Self Join 쿼리의 실행 결과는?
```sql
-- 고객 데이터: (1, Alice, Berlin), (2, Bob, Berlin), (3, Charlie, Paris)
SELECT A.CustomerName, B.CustomerName, A.City
FROM Customers A, Customers B
WHERE A.CustomerID < B.CustomerID
AND A.City = B.City;
```
정답: B
조건별 분석:
조건 1: `A.CustomerID < B.CustomerID`
• 순서 제한: A의 ID가 B보다 작은 경우만
• 중복 방지: 같은 조합이 두 번 나오는 것을 방지
• 효과: Alice-Bob은 포함, Bob-Alice는 제외
조건 2: `A.City = B.City`
• 같은 도시: 도시가 동일한 고객들만
• Berlin: Alice(ID=1), Bob(ID=2) → 같은 도시
• Paris: Charlie(ID=3) → 혼자만 있음
단계별 실행:
1단계: 모든 조합 생성
```txt
A(Alice,1,Berlin) - B(Alice,1,Berlin)
A(Alice,1,Berlin) - B(Bob,2,Berlin)
A(Alice,1,Berlin) - B(Charlie,3,Paris)
A(Bob,2,Berlin) - B(Alice,1,Berlin)
A(Bob,2,Berlin) - B(Bob,2,Berlin)
A(Bob,2,Berlin) - B(Charlie,3,Paris)
A(Charlie,3,Paris) - B(Alice,1,Berlin)
A(Charlie,3,Paris) - B(Bob,2,Berlin)
A(Charlie,3,Paris) - B(Charlie,3,Paris)
```
2단계: A.CustomerID < B.CustomerID 적용
```txt
A(Alice,1,Berlin) - B(Bob,2,Berlin) ✓ (1 < 2)
A(Alice,1,Berlin) - B(Charlie,3,Paris) ✓ (1 < 3)
A(Bob,2,Berlin) - B(Charlie,3,Paris) ✓ (2 < 3)
```
3단계: A.City = B.City 적용
```txt
A(Alice,1,Berlin) - B(Bob,2,Berlin) ✓ (Berlin = Berlin)
A(Alice,1,Berlin) - B(Charlie,3,Paris) ✗ (Berlin ≠ Paris)
A(Bob,2,Berlin) - B(Charlie,3,Paris) ✗ (Berlin ≠ Paris)
```
최종 결과:
```txt
CustomerName1 | CustomerName2 | City
Alice | Bob | Berlin
```
💡 학습 팁
이 문제를 포함한 SQL 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.