우선 조인(JOIN)에서 사용할 테이블 생성부터 하겠습니다.

 

mysql> create table a(a char(2), b char(2) );

 

a테이블을 생성하고 desc a;로 필드 형식을 확인합니다.


mysql> create table b(a char(2), c char(2) );

 

b테이블을 생성하고 desc b;로 필드 형식을 확인합니다.

 

 

두개의 테이블에 내용도 넣어보겠습니다.

 


우선 위의 그림처럼 a테이블에 내용을 넣습니다.

 

insert문을 다음과 같습니다. 

mysql> insert into a values(1, 'a');


mysql> insert into a values(2, 'b');


mysql> insert into a values(3, 'c');


내용을 저장한 뒤, 확인을 합니다.

mysql> select * from a;

 

 

 


 b테이블 역시 내용을 넣습니다.

 

insert문을 다음과 같습니다. 

mysql> insert into a values(2, 'b');


mysql> insert into a values(3, 'e');


내용을 저장한 뒤, 확인을 합니다.

mysql> select * from b;


 

1. INNER JOIN

 

INNER JOIN의 형식은 다음과 같습니다.

 

select [테이블명].[필드명], [테이블명].[필드명], ... from [테이블명] inner join

                                                                      [테이블명] where [조건절];

 

JOIN에서는 필드명 앞에 위의 형식과 같이 테이블명으로 별칭을 붙이게됩니다. 이유는 여러개의 테이블을

이용하기 때문에, 필드명이 같은 부분은 테이블명으로 별칭 구분하기 위해서입니다.

조건절 역시 테이블명으로 별칭을 사용합니다.

 

 

a테이블과 b테이블을 이용하여, inner join을 해 보겠습니다.


mysql> select a.a, a.b, b.c from a inner join b where a.a=b.a;


 
앞장에서 말 했듯이 INNER JOIN은 테이블간의 교집합입니다. 즉, 두 테이블간에 같은 값만을 불러와 출력합니다.

 

예) A 테이블 [a] [b]        B 테이블 [a] [c]

                  1    a                      2    b

                  2    b                      3   e

                     c

 

조건을 a테이블의 a값과 b테이블의 a 값이 같은 정보를 출력하려고 합니다.

그럼으로, a테이블의 a값과 b테이블의 a 값이 같은 정보는 필드명 a에서 2, 3이 됨으로,

첫번째 그림과 같은 출력값이 나타나게됩니다.

 

 2. LEFT OUTER JOIN

 

LEFT OUTER JOIN의 형식은 다음과 같습니다.

 

select [테이블명].[필드명], [테이블명].[필드명], ... from [테이블명] LEFT OUTER

                                                JOIN [테이블명] on [조건절];

 

 

mysql> select a.a, a.b, b.c from a left outer join b on a.a=b.a;

 

예) A 테이블 [a] [b]        B 테이블 [a] [c]

                  1    a                      null  null     <------  실제로는 없는 공간입니다. 이해를 돕기위해

                  2    b                        2    b                    임의로 null값으로 표현한 것입니다.

                     c                        3    e

 

A 테이블과 B 테이블의 정보를 하나의 정보로 불러오기위해

a, b, c의 필드명을 입력했고, 조건을 A 테이블과 B 테이블의 연결고리인 A 테이블의 a와

B 테이블의 a로 조건을 걸었습니다.

 

앞장에서 말 했듯이 LEFT  OUTER JOIN은 왼쪽테이블을 우선으로 불러들이고, 그다음 b 테이블과 비교해서 같은값은

그대로 적용하고, 서로 다른 값은 A테이블의 정보를 적용합니다. 양쪽 다 정보가 없을 땐 NULL로 표시하게 됩니다.

즉 위의 예를 보면 A테이블과 B테이블의 c에 대한 정보값이 없음으로, null로 표현이됩니다.

 

 

3. RIGHT OUTER JOIN

 

RIGHT OUTER JOIN의 형식은 다음과 같습니다.

 

select A.[필드명], B.[필드명], ... from [테이블명] RIGHTOUTER JOIN [테이블명] 

                                                                                                 on [조건절];

 


 

mysql> select a.a, a.b, b.c from rightouter join b on a.a=b.a;


예) A 테이블 [a] [b]        B 테이블 [a] [c]

                  1    a                       2    b

                  2    b                       3    e

                     c

 

RIGHT OUTER JOIN은 오른쪽 테이블을 우선으로 불러들이고, A테이블과 비교하여, 같은값은 그대로 넘어오고,

다른 값은 오른쪽 테이블을 우선으로 불러들이게 됩니다. A테이블의 1, a를 불러들이지 않는 이유는 

B 테이블에서는 1, a의 정보가 없어서 서로 비교를 하지 않기 때문입니다.

 

OUTER JOIN은 정확한 정보가 있는 테이블을 우선으로해서 비교 출력하기 때문에, LEFT와 RIGHT 같은 

방향성이 있는 것입니다.

 

 

이상으로 INNER JOIN과 OUTER JOIN에 대해 알아보았습니다.

다음장에서는 좀 더 자세한 정보를 가지고 있는 테이블을 이용하여 JOIN활용에

대해 알아 보겠습니다. 수고 하셨습니다.

+ Recent posts