JOIN은 FROM에서 2개 이상의 테이블을 결합하여 다수의 행을 검색하는 것을 말합니다.
JOIN의 일반적인 문법은 다음과 같습니다.
1 | T1 join_type T2 [ join_condition ] |
JOIN할 두 테이블을 입력하고 어느 타입의 JOIN을 사용할지 입력합니다. JOIN절은 여러가지 타입이 있습니다.
1 2 3 4 5 | [ INNER ] JOIN LEFT [ OUTER ] JOIN RIGHT [ OUTER ] JOIN FULL [ OUTER ] JOIN CROSS JOIN |
JOIN 타입에 대한 설명은 다음과 같습니다.
Type | 기능 |
---|---|
[INNER] JOIN | 테이블의 R1열의 값과 T2테이블에 R1열의 값이 같은 ROW를 반환하는 것 |
LEFT [OUTER] JOIN | JOIN문 왼쪽에 있는 T1테이블의 모든 결과를 가져온후에 오른쪽 T2테이블의 데이터를 매칭하여 매칭되는 데이터가 없는 경우 NULL값을 넣는 것 |
RIGHT [OUTER] JOIN | JOIN문 오른쪽에 있는 T2테이블의 모든 결과를 가져온후에 왼쪽 T1테이블의 데이터를 매칭하여 매칭되는 데이터가 없는 경우 NULL값을 넣는 것 |
FULL [OUTER] JOIN | 양쪽 T1, T2테이블의 모든 결과를 가져와서 매칭시키고 데이터가 없는 경우 NULL값을 넣는 것 |
CROSS JOIN | 양쪽 T1, T2테이블의 모든 결과를 가져와서 매칭시키고 데이터가 없는 경우 NULL값을 넣는 것 |
예제를 실행하기 위해 T1테이블과 T2테이블을 생성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | CREATE TABLE T1( num integer PRIMARY KEY , name varchar (5) ); num | name //T1테이블 -----+------ 1 | a 2 | b 3 | c CREATE TABLE T2( num integer PRIMARY KEY , value varchar (5) ); num | value //T2테이블 -----+------- 1 | xxx 3 | yyy 5 | zzz |
다음은 T1, T2테이블의 INNER JOIN 예제입니다. T1테이블의 num값과 T2테이블의 num값이 같은 것을 INNER JOIN하여 출력합니다.
1 2 3 4 5 6 7 8 9 10 | SELECT * FROM T1 INNER JOIN T2 ON T1.num = T2.num; num | name | num | value -----+-------+------+------- 1 | a | 1 | xxx 3 | c | 3 | yyy (2 rows ) |
다음은 T1, T2테이블의 LEFT OUTER JOIN 예제입니다. T1테이블과 T2테이블을 INNER JOIN하여 왼쪽에 있는 T1테이블의 모든 결과를 가져온후에 오른쪽 T2테이블의 NUM값을 매칭하여 매칭되는 데이터가 없는 경우 NULL값을 넣습니다.
1 2 3 4 5 6 7 8 9 10 11 | SELECT * FROM T1 LEFT JOIN T2 USING (num); num | name | value -----+------+------- 1 | a | xxx 2 | b | 3 | c | yyy (3 rows ) |
다음은 T1, T2테이블의 RIGHT OUTER JOIN 예제입니다.
T1테이블과 T2테이블을 INNER JOIN하여 오른쪽에 있는 T2테이블의 모든 결과를 가져온후에 오른쪽 T1테이블의 NUM값을 매칭하여 매칭되는 데이터가 없는 경우 NULL값을 넣습니다.
1 2 3 4 5 6 7 8 9 10 11 | SELECT * FROM T1 RIGHT JOIN T2 ON T1.num =T2.num; num | name | num | value -----+------+-----+------- 1 | a | 1 | xxx 3 | c | 3 | yyy | | 5 | zzz (3 rows ) |
다음은 T1, T2테이블의 FULL OUTER JOIN 예제입니다. FULL OUTER JOIN은 양쪽 T1, T2테이블의 모든 결과를 가져와서 매칭시키고 데이터가 없는 경우 NULL값을 넣습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT * FROM T1 FULL OUTER JOIN T2 ON T1.num = T2.num; num | name | num | value -----+------+-----+------- 1 | a | 1 | xxx 2 | b | | 3 | c | 3 | yyy | | 5 | zzz (4 rows ) |
다음은 T1, T2테이블의 CROSS JOIN 예제입니다. CROSS JOIN은 T1, T2테이블의 모든 행들을 JOIN시킵니다. 결과는 두 테이블의 행의 개수를 곱한것과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SELECT * FROM t1 CROSS JOIN t2; num | name | num | value -----+-------+------+------- 1 | a | 1 | xxx 1 | a | 3 | yyy 1 | a | 5 | zzz 2 | b | 1 | xxx 2 | b | 3 | yyy 2 | b | 5 | zzz 3 | c | 1 | xxx 3 | c | 3 | yyy 3 | c | 5 | zzz (9 rows ) |
- 강좌 URL : http://www.gurubee.net/lecture/2953
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.