[Data Base] MySQL ★INNER/OUTER JOIN

HOHO·2023년 3월 17일

#MYSQL

목록 보기
13/17

내부결합 (INNER JOIN)

INNER JOIN은 일반적으로 가장 많이 활용하는 결합으로, 두 테이블 조건절을 통해 일치하는 경우에만 결합하는 거라 할 수 있습니다.


상품이라는 테이블과 재고수가 나와있는 테이블이 있고 상품코드는 두테이블 모두 일치한다
-> 두 테이블에 동일한 이름과 자료형이 있다면 서로 참조가 가능하다

1번 - 암시적 내부결합

select 상품명, 재고수
from 상품, 재고수
where 상품.상품코드 = 재고수.상품코드;
#from절에 두테이블을 (,)로 연결

2번 - 명시적 내부결합
유지보수를 위해 권장

select 상품명, 재고수
from 상품 inner join 재고수
on 상품.상품코드 = 재고수.상품코드;
#inner join키워드를 이용한 연결
#inner는 생략가능

결과

select *
from 상품 inner join 재고수
on 상품.상품코드 = 재고수.상품코드;
#select절에서 *,column명으로 원하는 내용 표시 가능
#join절에서 결합을 원하는 column지정

내부결합을 이용한 데이터관리

메이커 테이블

select 상품명,메이커명,S.메이커코드
from 상품2 S inner join 메이커 M
on S.메이커코드 = M.메이커코드;
#별칭 추가
#Error Code: 1052. 
#Column '메이커코드' in field list is ambiguous

S.메이커코드에서 S.을 생략하면

Error Code: 1052. Column '메이커코드' in field list is ambiguous
오류가 난다
어떤테이블의 '메이커코드'를 써야할지ambiguous(애매모호)하다는 것


외부결합(OUTER JOIN)

OUTER JOIN은 결합시 두 테이블간에 일치하지 않는 데이터도 보여 줄것을 이야기한다

게시글의 예시

  • INNER JOIN : 코멘트가 있는 게시글만 보여줘.
  • OUTER JOIN : 코멘트가 없는 게시글도 보여줘.
select S.상품명,재고수.재고수
from 상품3 S left join 재고수
on S.상품코드 = 재고수.상품코드;
------------------------------
select S.상품명,재고수.재고수
from 상품3 S right join 재고수
on S.상품코드 = 재고수.상품코드;
#join키워드를 기준으로 left,right

left -> 왼쪽테이블을 기준으로 삼아 오른쪽테이블에 없는것을 표시
right -> 오른쪽테이블을 기준으로 왼쪽테이블에 없는것을 표시

  • 주로 left가 많이 쓰인다는 듯

상품테이블과 재고테이블 각각 마지막 줄에 데이터를 추가했다

insert into 상품 values('0006','추가물건','M001',22100,'쌀');
insert into 재고수 values ('0008','2014-03-21',2223);

이제 left와 right의 차이를 보자

LEFT

select *
from 상품 left join 재고수
on 상품.상품코드 = 재고수.상품코드;

상품테이블이 기준이므로 상품에 추가된 데이터들이 결합되어 나왔다
재고테이블의 데이터들은 NULL이 나왔다


select *
from 상품 right join 재고수
on 상품.상품코드 = 재고수.상품코드;

마찬가지로 오른쪽 재고테이블이 기준이므로 재고에 추가된 데이터들이 나왔고 null이 나왔다


FULL

MYSQL에는 FULL OUTER JOIN이 없다고 한다
그러므로 union으로 묶어줘야한다

select *
from 상품 left join 재고수
on 상품.상품코드 = 재고수.상품코드
union
select *
from 상품 right join 재고수
on 상품.상품코드 = 재고수.상품코드;


서로 없는 데이터들을 끌어와서 다 표시해준다

profile
기계 그잡채가 되고싶다

0개의 댓글