PostgreSQL 기본강좌
JOIN 0 0 79,369

by PostgreSQL PostgreSQL JOIN PostgreSQL 기본 [2015.12.03]


JOIN 문법

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

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

  • JOIN Syntax
  • 1
    T1 join_type T2 [ join_condition ]

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

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

JOIN 예제

예제를 실행하기 위해 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

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

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

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