SQL - 문제 미리보기

문제 1653

hard
다음 상황에서 가장 적절한 쿼리는?

상황: 모든 고객의 목록을 출력하되, 2024년에 주문한 고객은 주문 횟수를, 주문하지 않은 고객은 0으로 표시하고 싶습니다.
A. ```sql
SELECT c.CustomerName, COUNT(o.OrderID) AS OrderCount
FROM Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE YEAR(o.OrderDate) = 2024
GROUP BY c.CustomerName;
```
B. ```sql
SELECT c.CustomerName, COUNT(o.OrderID) AS OrderCount
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE YEAR(o.OrderDate) = 2024
GROUP BY c.CustomerName;
```
C. ```sql
SELECT c.CustomerName, COUNT(o.OrderID) AS OrderCount
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
AND YEAR(o.OrderDate) = 2024
GROUP BY c.CustomerName;
```
D. ```sql
SELECT c.CustomerName, COUNT(*) AS OrderCount
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerName;
```

정답: C


요구사항 분석:
• 모든 고객 포함: LEFT JOIN 필요
• 2024년 조건: 조인 조건에 포함해야 함
• 0 표시: 주문 없는 고객도 결과에 포함

선택지별 분석:

선택지 1 (INNER JOIN + WHERE):
```sql
-- 문제점: 2024년 주문한 고객만 나타남
-- 결과: 주문 없는 고객 제외됨
```
선택지 2 (LEFT JOIN + WHERE):
```sql
-- 문제점: WHERE 절이 LEFT JOIN 효과를 상쇄
-- 동작: LEFT JOIN 후 WHERE로 필터링 → INNER JOIN과 유사한 결과
-- 결과: 주문 없는 고객 제외됨
```
선택지 3 (LEFT JOIN + 조인 조건) - 정답:
```sql
-- 올바른 방법: 조건을 조인 조건에 포함
-- 동작: 2024년 주문만 매칭, 없으면 NULL
-- 결과: 모든 고객 포함, 주문 없으면 COUNT = 0
```
선택지 4 (연도 조건 없음):
```sql
-- 문제점: 2024년 조건이 없음
-- 결과: 모든 연도 주문 포함
```

💡 학습 팁

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