SQL 조인에 대한 이해 - Outer Join과 Inner Join
1. 연관관계와 주체
"연관관계의 주체가 된다"라는 표현은 관계형 데이터베이스에서 테이블 간에 연결(연관관계)을 만드는 역할을 한다는 것을 의미합니다.
"FK를 가진다"는 외래 키(Foreign Key, FK)를 가지고 있다는 의미인데, 외래 키는 한 테이블의 필드가 다른 테이블의 기본 키(Primary Key, PK)를 참조하는 것을 의미합니다.
이 외래 키는 테이블 간의 관계를 정의하며, 데이터 무결성을 보장하는 데 중요한 역할을 합니다.
SQL에서 조인을 이해하려면 먼저 연관관계와 그 주체를 이해해야 합니다.
연관관계의 주체는 일반적으로 외래 키(Foreign Key, FK)를 가지고 있는 테이블입니다.
이를 '드라이빙(Driving)'이라고 합니다.
예를 들어, 주문(Order) 테이블과 고객(Customer) 테이블이 있을 때, 주문 테이블은 고객 테이블을 참조하는 FK를 가질 것이므로 주문 테이블이 '드라이빙’이 됩니다.
아래는 예시를 설명하는 테이블입니다.
테이블 | PK | FK | 연관관계 |
---|---|---|---|
주문 | OrderID | CustomerID | 고객 테이블과 연관 |
고객 | CustomerID | - | 주문 테이블을 참조하지 않음 |
주문 테이블은 고객 테이블을 참조하는 FK(CustomerID)를 가지고 있기 때문에 '연관관계의 주체’가 되며, 이를 '드라이빙’이라고 부릅니다.
반면에 고객 테이블은 주문 테이블을 참조하는 FK를 가지고 있지 않으므로 '드라이븐’이라고 부릅니다.
이를 통해 주문이 어떤 고객에게서 왔는지를 알 수 있습니다.
2. Join의 종류
2.1. Left Outer Join
왼쪽 테이블의 모든 행과 오른쪽 테이블에서 매칭되는 행을 결과에 포함합니다.
매칭되는 행이 없을 경우 NULL 값을 사용합니다.
예를 들어, 고객 테이블이 왼쪽 테이블이고 주문 테이블이 오른쪽 테이블일 때, 고객이 주문을 하지 않았더라도 고객 정보는 결과에 표시됩니다.
2.2. Right Outer Join
오른쪽 테이블의 모든 행과 왼쪽 테이블에서 매칭되는 행을 결과에 포함합니다.
매칭되는 행이 없을 경우 NULL 값을 사용합니다.
위의 예제에서 이번에는 주문 테이블이 오른쪽 테이블이면, 주문 정보는 모두 결과에 표시되며, 해당 주문을 한 고객이 없는 경우 고객 정보는 NULL로 표시됩니다.
2.3. Inner Join
두 테이블 모두에서 매칭되는 행만 결과에 포함합니다.
예를 들어, 포스트 테이블과 댓글 테이블을 Inner Join했을 때, 댓글이 없는 포스트는 결과에 표시되지 않습니다.
또한, 포스트가 없는 댓글도 결과에 표시되지 않습니다.
3. 조인의 선택
조인을 수행할 때에는 어떤 테이블을 '드라이빙(Driving, 왼쪽)'으로, 어떤 테이블을 '드리븐(Driven, 오른쪽)'으로 선정합니다.
이 결정은 데이터의 특성, 성능 요구 사항 등 다양한 요인을 고려하여 결정되어야 합니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Java' 카테고리의 다른 글
@ToString (0) | 2023.07.10 |
---|---|
@Component (0) | 2023.07.10 |
Meta 어노테이션 (0) | 2023.07.07 |
IoC (0) | 2023.07.07 |
DispatcherServlet은 어떻게 View와 Controller를 구별할까 (0) | 2023.07.05 |