DB 간단 명령어 (Part6)

서재환·2022년 2월 8일
0

DB

목록 보기
6/13

join

이번 시간에는 join에 대해서 알아보자.

join 중에는 left join 과 inner join이 있다. 전자(어느 한 테이블; left join이 
쓰여 있는 명령어 앞 쪽 부분에 있는 테이블을 기준으로 해서 다른 테이블을 이어 붙이는 것)는
이어 붙일 때 두 테이블에 모두 존재하는 field를 기준으로 붙인다. 그런데 한가지, inner 
join과 다른 점은 두 테이블을 특정 field를 기준으로 붙일 때 왼쪽 테이블에는 붙이려는 fi
eld에 값이 있지만 오른쪽 테이블에는 해당 값이 없는 경우 해당 field를 기준으로 테이블을 
붙였을 때 테이블의 field 값은 NULL로 채워지게 된다. 애초에 2개의 테이블을 붙일 때 특정 
field의 값으로 붙이는 것이기 때문에 왼쪽 테이블의 특정 열은 붙이려는 테이블의 모든 field
의 값을 얻을 수 없게 되는 것이다. 그것이 left join이다. diagram으로 이해하자면 left
join의 경우 A 그 자체이다. left join 이후 B 테이블을 추가적으로 붙였다고 생각하면 된다.

left join과는 반대로 inner join 의 경우 공통 field를 접합 부분으로 하여 왼쪽에 있
는 테이블을 기준으로 오른쪽 테이블을 붙인다고 할 때, 왼쪽 field에는 그 값이 있지만 오른
쪽 field에는 그 값이 없는 경우 해당 열을 제외(왼쪽 테이블에서 해당 열 제외)하고서 값이
있는 열들만 붙이게 된다. 그래서 두테이블의 교집합이라고 diagram으로 설명하는 것이다.
left join

말 만으로는 이해하기  어려우므로 예시를 들어 설명을 하자면 users라는 테이블에는 사용자가 
유저 아이디를 만든시간 사용자 정보를 고친시간(업데이트한 시간), 사용자의 이름, 이메일 정
보가 해당 테이블에 들어있다.

orders 테이블에는 주문번호를 프라이머리 키로하여 아이디를 만든 시간, 업데이트 한 시간 주문
한 강좌의 아이디, 강좌 제목, 유저 아이디, 결제 수, 이메일 field가 있다.

이런 두 테이블이 있을 때 users 테이블을 기준으로 orders 테이블을 user_id를 기준으로 
붙인다고 했을 때 어떤 사용자는 가입만 하고 강좌를 구매하지 않는 사용자가 있을 수가 있다. 
그런 데이터의 경우 orders에 테이블에 left join을 한 경우 필드의 값이 모두 NULL인 
결과가 나올 수 있다. 

위의 결과 값이 나오기 위한 명령어로는 아래와 같다.

select * from users u
left join orders o
on u.user_id = o.user_id

해석
users 테이블에 별칭 u를 주고 해당 테이블에 있는 내용을 모두 가지고 오기 전에 우선
별칭 o를 준 orders 테이블과 붙일 것이다. 접착제 역할을 하는 field는 user_id이
다. 붙인 결과물 전체를 select 해서 표시한다.

0개의 댓글