본문 바로가기
[파이썬]/데이터베이스

[MariaDB] Join (Inner Join, Outer Join)

by sung min_Kim 2023. 11. 26.
조인(Join)


결합


· 조인을 사용하는 이유는 ?


 조인은 여러 테이블 간의 관계를 사용하여 관련 있는 데이터를 결합하는 SQL의 기능이다.
 조인을 사용하는 이유은 분산된 정보를 통합하여 필요한 데이터를 한 번에 조회할 수 있기 때문이다.
 따라서, 조인을 사용하면 관련 있는 정보를 한 번의 쿼리로 효율적으로 검색할 수 있다.


데이터베이스의 무결성 유지 : 무결성이란 데이터베이스에서 데이터의 정확성, 일관성, 유효성이 '유지'되는 것을 의미한다. 테이블 간의 관계를 설정함으로써 무결성을 보장하게 되는데, 이때 조인이 중요한 역할을 한다. 조인은 테이블의 기본 키와 외래 키 간 연관 관계를 통해 데이터의 무결성을 '유지'한다.(무결성은 데이터베이스의 설계와 관리 과정에서 보장되어야 하며, 조인은 무결성을 직접 보장하는 게 아니라 '유지'하는 역할만 수행한다.)

 


· 조인의 종류


 조인은 두 개 이상의 테이블에서 관련된 데이터를 함께 조회하기 위함이다. 이를 위해서는 테이블 간의 관계를 정의해야 하는데, 이때 Inner Join과 Outer Join을 사용한다.
 ( 테이블 간 관계를 정의하는 '관계 조건'은 반드시 1개 이상 제시되어야만 한다.)



  • Inner Join : 두 테이블 간에 공통적으로 존재하는 데이터를 반환한다. 즉, 조인 조건에 맞는 행만 결과로 반환한다.


  • Outer Join : 두 테이블 간에 공통적으로 존재하는 데이터뿐만 아니라, 한 테이블에만 존재하는 데이터까지 결과에 포함시키고 싶을 때 사용한다.

 


· 조인의 표현 방식

 

 

  • Inner Join

Inner Join


 Inner은 '같다'라는 의미로 사용되며, Inner Join은 두 테이블 간에 공통적으로 존재하는 행 데이터에 대해 조인 조건(관계 조건, 일반 조건)을 만족하는 행 데이터만 반환하는 조인 방식이다.

 Inner Join 방식은 일반 방식과 표준 방식 모두 같은 결과를 출력하기에 표준처럼 사용한다.

 Inner Join 일반 방식

 

Select 컬럼1, ... ,컬럼n
From 테이블1, ... , 테이블n
Where 관계 조건(PK = FK
   And 일반 조건);


 여기서는 Join 키워드를 사용하지 않고, From 절에서 여러 테이블을 콤마로 구분하여 나열하고, Where 절에서 테이블 간의 관계 조건을 명시한다. 이 방식은 Inner Join 키워드를 사용하여 명시적으로 내부 조인을 표현하는 방식과 동일한 결과를 반환한다. 그러나 가독성과 명확성을 위해 현재는 명시적인 'Inner Join' 표현 방식을 권장하고 있다.



Inner Join 표준 방식

 

Select 컬럼1, ..., 컬럼n
from 테이블1
   Inner Join 테이블2
      On(관계 조건
      And 일반 조건)

 

 표준 방식은 'Inner Join' 키워드를 사용하여 테이블의 관계를 명시적으로 나열한다. On 절에서는 두 테이블 간의 관계 조건(PK =  FK)을 명시하고, Where 절의 일반 조건은 And 절에 명시한다.

 

  • 예시
<예제_Inner Join 사용> '서울, 대전, 광주'에 위치한 거래처에서 판매하는 상품을 5개 이상 주문한 회원의 정보를 조회하기

- 조회 컬럼 : 회원ID(mem_id), 회원이름(mem_name), 상품명(prod_name),
             주문수량(cart_qty), 거래처 주소(buyer_add1)

- 정렬 : 회원ID 기준 오름차순, 주문수량 기준 내림차순

(Cart 테이블은 장바구니의 개념이 아니라 '주문한' 개념으로 사용)

Inner Join을 사용하여 정보 조회하기


 거래처(Buyer)에서 판매하는 상품(Prod)을 주문(Cart)한 회원(Member)의 정보를 조회하기 위해, 회원(Member) 테이블을 기준으로 각 테이블을 Inner Join 방식을 사용하여 연결하였다. Inner Join 방식을 적용한 테이블은 이전에 위치한 테이블과 연결되어 두 테이블 간 공통적으로 가지고 있는 데이터를 출력할 수 있게 된다.

 관계 조건은 '(두 테이블의) PK = FK'이며, 일반 조건은 And 절을 사용하여 명시하였다.

 회원(Member) 테이블은 주문내역 테이블(Cart)과의 관계 조건과, And 절의 일반 조건을 통해 "주문수량이 5 이상인 회원"에 대한 데이터를 출력한다.
 
 상품(Prod) 테이블은 주문내역 테이블(Cart)과의 관계 조건을 통해 "주문내역이 있는 상품"을 조회 결과에 포함시킨다.

거래처 정보(Buyer) 테이블은 상품(Prod) 테이블과의 관계 조건과 일반 조건을 통해 "상품의 거래처 주소가 서울, 대전, 광주"에 위치한 거래처의 상품을 조회할 수 있다.

 따라서 이 쿼리의 해석은 "5개 이상의 제품을 주문한 회원 중에서, 그 제품을 판매하는 거래처가 서울, 대전, 광주에 위치한 경우의 회원ID, 회원이름, 상품명, 주문수량, 거래처 주소를 조회하고, 그 결과를 회원ID 오름차순, 주문수량 내림차순으로 정렬한다"라고 할 수 있다.

 


  • Outer Join

 Outer은 '바깥쪽의'라는 뜻으로, SQL에서 Outer Join은 두 테이블을 연결할 때, 하나의 테이블이 다른 테이블에 완전히 포함되지 않는 방식, 즉 '외부적으로 연결'하는 방식을 의미한다.

 Outer Join은 두 테이블 간에 공통적으로 존재하는 데이터뿐만 아니라, 한 테이블에만 존재하는 데이터까지도 결과에 포함시키고 싶을 때 사용하는 조인 방식이다.

 표준 방식으로만 사용하며, Left, Right, Full 세 가지 형태가 있다. (단, Full은 Oarcle에서만  사용 가능하다.)

Left Outer Join         Right Outer Join

 

Left Outer Join

 

Select 컬럼1, ..., 컬럼n
from 테이블1
   Left Outer Join 테이블2
      On(관계 조건
      And 일반 조건)


 'Left Outer Join'은 왼쪽 테이블의 모든 데이터와 오른쪽 테이블에서 조인 조건에 맞는 데이터를 반환한다. 즉, 왼쪽 테이블을 기준으로 데이터가 매칭되며, 왼쪽 테이블에 매칭되는 데이터가 없는 경우에는 Null로 채워진다.



Right Outer Joun

 

Select 컬럼1, ..., 컬럼n
from 테이블1
   Right Outer Join 테이블2
      On(관계 조건
      And 일반 조건)


 'Right Outer Join'은 오른쪽 테이블의 모든 데이터와 왼쪽 테이블에서 조인 조건에 맞는 데이터를 반환한다. 즉, 오른쪽 테이블을 기준으로 데이터가 매칭되며, 오른쪽 테이블에 매칭되는 데이터가 없는 경우에는 Null로 채워진다.


  • 예시
<예제_Outer Join 활용> 2005년도에 대한 전체 거래처별 총매출금액을 조회하기

- 조회 컬럼 : 거래처 코드(buyer_id), 거래처명(buyer_name), 총매출금액
- 정렬 : 총매출금액 내림차순

Left Outer Join을 사용하여 정보 조회하기


 왼쪽 테이블(Buyer)에 대한 모든 정보를 포함하면서, 오른쪽 테이블(Prod, Cart)의 조인 조건을 만족하는 정보를 출력하고자 'Left Outer Join' 방식을 사용하였다.


 조인 조건은 "거래처 코드(buyer_id)가 상품 테이블의 거래처 코드(prod_buyer)와 일치"하며, "상품 코드(prod_id)가 주문내역 테이블의 상품 코드(cart_prod)와 일치"하는 경우이다.

 일반 조건은 And 절을 사용하여 "주문번호(cart_no)가 2005로 시작하는 데이터"만 포함된다.

 위의 쿼리는 거래처(buyer_id) 별로 그룹화하여, 그룹화된 거래처의 총매출금액에 대해룹 함수(Count)를 적용함으로써 각 그룹별 총매출금액에 대한 연산 결과를 반환한다. 매출금액은 상품 판매가(prod_sale)와 주문 수량(cart_qty)의 곱으로 계산되며, 만약 이 값이 'Null'인 경우에는 0으로 처리되어 반환된다.

 따라서 이 쿼리는 "2005년에 주문된 상품을 보유한 모든 거래처에 대한 거래처의 코드, 이름, 해당 거래처의 총매출금액을 조회하고, 총매출금액을 기준으로 내림차순 정렬한다."라고 할 수 있다.

 


· SQL 컴파일(해석) 처리 순서

 

 

  1. Select

  2. From 절

  3. Join 절

  4. Where 절

  5. Group By 절

  6. Having 절

  7. Select 컬럼들

  8. Order By 절

 



Join은 두 개 이상의 테이블을 연결하여, 관련 있는 정보를 한눈에 볼 수 있다.
이는 데이터 분석에서 매우 중요한 단계이다.


Inner Join은 두 테이블 간에 공통된 값이 있는 경우에만 결과를 반환한다.
즉, 양쪽 테이블에서 일치하는 값이 있는 행만 반환된다.


Outer Join은 한쪽 테이블에만 존재하는 데이터도 결과에 포함시킨다.
Left Outer Join은 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 행을 반환하여,
Right Outer Join은 이 반대로 동작한다.



Join을 사용할 때에는 테이블 간의 관계를 정확히 이해하는 것이 중요하다. 잘못된 Join은 잘못된 결과를 가져올 수 있다.

 

'[파이썬] > 데이터베이스' 카테고리의 다른 글

[MairaDB] Union(유니온)  (1) 2023.11.27
[MariaDB] 가상 테이블(Inline View)  (1) 2023.11.26
[MariaDB] If 함수  (0) 2023.11.25
[MariaDB] Case 문  (1) 2023.11.25
[MariaDB] 정렬 (Order By)  (0) 2023.11.25