본문 바로가기
프로그래밍/MySQL

[MySQL] JOIN 이란? (INNER, OUTER, CROSS)

by tempus 2021. 8. 9.
반응형

🔶 Intro

RDBS에서 두 개 이상의 테이블을 서로 묶어서 하나의 결과를 보아야 할 경우가 많습니다.

예를 들어 쇼핑몰에서 상품을 구매한 회원 목록을 출력하기 위해선 회원 정보 테이블구매 테이블을 연결해야 합니다. 이때 사용하는 것이 join입니다.

 

예를 들어 아래의 2개의 테이블이 가지고 있습니다.

 

depart_table_img
부서 테이블

employee_table_img
사원 테이블

🔶 INNER JOIN

이너 조인은 우리가 조인하고자 하는 두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인 방식입니다.

select <열 목록>
from <첫 번째 테이블>
inner join <두 번째 테이블>
on <조인될 조건>
[where 검색조건]

사원의 정보와 해당하는 부서를 동시에 보고 싶을 때 아래와 같은 query문을 사용하면 다음과 같은 결과를 얻을 수 있습니다.

SELECT *
FROM user u
INNER JOIN user_group g ON (g.deptNo = u.deptNo);

innerjoin_img
이너 조인

즉, INNER JOIN은 두 테이블에 교집합에 해당하게 되는 것을 알 수 있습니다.

🔶 OUTER JOIN

아우터 조인은 조인할 테이블에 일치하는 레코드가 있으면 INNER 조인과 같은 결과를 만들어내지만, INNER 테이블에 조건을 만족하는 레코드가 없는 경우에는 조인할 테이블의 칼럼을 모두 NULL로 채워서 가져옵니다. (mySQL에서는 full join을 지원하지 않는 대신 union을 사용해 right, left 구문을 합칠 수 있습니다.)

select <열목록>
from <첫 번째 테이블(left 테이블)>
<left | right > OUTER JOIN < 두 번째 테이블(RIGHT 테이블)>
on <조인될 조건>
[WHERE 검색조건]

OUTER는 생략 가능합니다.

SELECT *
FROM user u
left JOIN user_group g ON (g.deptNo = u.deptNo);

해당 쿼리는 user 테이블을 기준으로 하고 있습니다.

 

outer_join_img
아우터 조인

🔶 CROSS JOIN

이너 조인과 아우터 조인은 두 테이블 간의 특정 기준에 의해 데이터 결합의 결과를 보여주는 방식이었다면, 크로스 조인은 특정 기준 없이, 두 테이블 간 가능한 모든 경우의 수에 대한 결합을 결과로 보여주는 방식입니다.

SELECT *
FROM 테이블1
CROSS JOIN 테이블2

user 테이블의 행의 개수 7 * user_group 테이블의 행의 개수 3 = 21개의 행이 나타납니다.

SELECT *
FROM user 
CROSS  JOIN user_group;

cross_join_img
크로스 조인
반응형

댓글


loading