본문 바로가기
Programing/SQLite

[SQLite] 조인(join) 에 대해 알아보자.

by TEXTBOX 2021. 10. 25.
728x90

조인(join)에 종류가 많지만 많이 사용되는 3가지 조인(join)에 대해서만 정리를 한번 해 보았다.

INNER JOIN 절

A테이블과 B테이블에 조인조건에 일치하는 데이터만 보여준다.

A테이블

이름 주소 성별
mark 서울
jein 부산
tom 대전

B테이블

이름 취미 특기
mark 골프 제기차기
jon 등산 널뛰기
jein 게임 구슬치기

 

이렇게 2개의 테이블이 있을경우 A테이블과 B테이블의 조건을 잡을 수 있는 키가 되는 이름칼럼으로
Inner Join 을 했을 경우 아래와 같은 결과가 나타난다.

결과테이블

이름 주소 성별 취미 특기
mark 서울 골프 제기차기
jein 부산 게임 구츨치기

이렇게 조건칼럼에 공통으로 일치하는 칼럼의 정보만 나타난다.
SQLite 문법으로는 아래와 같이 사용하면 결과가 나타난다.

select a.이름, a.주소, a.성별, b.취미, b.특기
from A테이블명칭 a
inner join B테이블명칭 b
on a.이름 = b.이름

 

LEFT OUTER JOIN 절

left outer join 의 경우 기준이 되는 테이블은 전체가 select가 되고, left outer join 으로 추가 되는 테이블에서
조인조건에 충족되는 데이터는 보여주고 없는경우 해당 값은 null값이 된다.

예시)

A테이블

인원 담당선생님
웃음반 5 jon
행복반 8 julia
재미반 6 brawn
열정반 7 sandy

B테이블

선생님 특기과목 경력
jon 체육 10년
sandy 미술 25년

A테이블의 담당선생님과 B테이블의 선생님을 조인조건으로 하고 결과테이블을 조회했을경우
아래와 같다.

결과테이블

인원 담당선생님 특기과목 경력
웃음반 5 jon 체육 10년
행복반 8 julia <null> <null>
재미반 6 brawn <null> <null>
열정반 7 sandy 미술 25년

결과테이블과 같이 조인조건에 해당되는 B테이블의 정보는 나타나지만 조인조건에 해당되는
데이터를 찾지못한 row 의 B테이블의 값은 null로 나타난다.
결과테이블 값을 찾는 문법은 아래와 같다.

select a.반, a.인원, a.담당선생님, b.특기과목, b.경력
from A테이블 a
left outer join B테이블 b
on a.담당선생님 = b.선생님

 

CROSS JOIN 절

cross join 은 기준테이블과 cross join으로 추가되는 테이블을 곱하여 보여준다고 생각하면 된다.
예를들어 A테이블에 3row가 있고 B테이블에 4row가 있으면 총 12row의 결과데이터가 조회된다고 보면된다.
행별로 경우의 수가 다 발생되기 때문에 특별히 조인조건을 설정하지는 않는다.

A테이블

과일 원산지 구매가격
수박 국산 9,900
바나나 필리핀 1,800
한라봉 국산(제주도) 15,500

B테이블

품종 용도분류 보관장소
특대 선물용 A 1-2-4
일반판매 A 1-4-7
일반판매 B 2-7-3
쥬스용 B 1-5-2

두 테이블을 CROSS JOIN을 할 경우 결과테이블은 아래와 같다.

결과테이블

과일 원산지 구매가격 품종 용도분류 보관장소
수박 국산 9,900 특대 선물용 A 1-2-4
수박 국산 9,900 일반판매 A 1-4-7
수박 국산 9,900 일반판매 B 2-7-3
수박 국산 9,900 쥬스용 B 1-5-2
바나나 필리핀 1,800 특대 선물용 A 1-2-4
바나나 필리핀 1,800 일반판매 A 1-4-7
바나나 필리핀 1,800 일반판매 B 2-7-3
바나나 필리핀 1,800 쥬스용 B 1-5-2
한라봉 국산(제주도) 15,500 특대 선물용 A 1-2-4
한라봉 국산(제주도) 15,500 일반판매 A 1-4-7
한라봉 국산(제주도) 15,500 일반판매 B 2-7-3
한라봉 국산(제주도) 15,500 쥬스용 B 1-5-2

해당 결과 테이블과 같이 경우의 수가 조회결과로 나타난다.
결과 테이블의 조회 문법은 아래와 같다.

select a.과일, a.원산지, a.구매가격, b.품종, b.용도분류, b.보관장소
from A테이블 a
cross join B테이블 b

 

728x90

댓글