PostgreSQL 기본강좌
JOIN 0 0 63,547

by PostgreSQL PostgreSQL JOIN PostgreSQL 기본 [2015.12.03]


JOIN 문법

JOIN은 FROM에서 2개 이상의 테이블을 결합하여 다수의 행을 검색하는 것을 말합니다.

JOIN의 일반적인 문법은 다음과 같습니다.

  • JOIN Syntax
  • T1 join_type T2 [ join_condition ]
    

JOIN할 두 테이블을 입력하고 어느 타입의 JOIN을 사용할지 입력합니다. JOIN절은 여러가지 타입이 있습니다.

  • JOIN Type
  • [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값을 넣는 것

JOIN 예제

예제를 실행하기 위해 T1테이블과 T2테이블을 생성합니다.

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하여 출력합니다.

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값을 넣습니다.

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값을 넣습니다.

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값을 넣습니다.

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시킵니다. 결과는 두 테이블의 행의 개수를 곱한것과 같습니다.

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

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입