3개 테이블을 INNER JOIN으로 연결하는 다음 쿼리의 빈칸과 실행 원리를 올바르게 분

과목: MySQL

문제 번호: 3134

hard
3개 테이블을 INNER JOIN으로 연결하는 다음 쿼리의 빈칸과 실행 원리를 올바르게 분석한 것은?
-- Orders, Customers, Shippers 3개 테이블 연결
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
______ ______ Customers ON Orders.CustomerID = Customers.CustomerID)
______ ______ Shippers ON Orders.ShipperID = Shippers.ShipperID);

데이터 상황:
⦁ Orders: OrderID(10308), CustomerID(2), ShipperID(3)
⦁ Customers: CustomerID(1,2,3)
⦁ Shippers: ShipperID(1,2,3)
A. 빈칸: INNER JOIN, INNER JOIN / 결과: 모든 조건이 만족되는 주문만 포함
B. 빈칸: LEFT JOIN, RIGHT JOIN / 결과: 모든 주문이 포함됨
C. 빈칸: INNER JOIN, LEFT JOIN / 결과: 고객 정보는 있고 배송업체 정보는 부분적
D. 빈칸: CROSS JOIN, CROSS JOIN / 결과: 모든 조합이 생성됨

정답: A



올바른 쿼리는 다음과 같습니다:
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);

3-테이블 INNER JOIN 실행 과정:

1. 첫 번째 조인: Orders와 Customers를 CustomerID로 연결
⦁ Orders.CustomerID(2) = Customers.CustomerID(2) ✓

2. 두 번째 조인: 첫 번째 결과와 Shippers를 ShipperID로 연결
⦁ Orders.ShipperID(3) = Shippers.ShipperID(3) ✓

괄호의 역할:
((Orders INNER JOIN Customers) INNER JOIN Shippers)
⦁ 첫 번째 JOIN을 먼저 실행하고, 그 결과와 세 번째 테이블을 JOIN
⦁ 실행 순서를 명확하게 지정

INNER JOIN 연쇄의 특징:
⦁ 모든 조건이 만족되는 레코드만 최종 결과에 포함
⦁ 세 테이블 중 하나라도 매칭되지 않으면 해당 레코드는 제외
⦁ OrderID 10308은 CustomerID 2와 ShipperID 3이 모두 존재하므로 결과에 포함

💡 학습 팁

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