백엔드/PostgresQL

[PostgreSQL] Postgresql 강좌 - 9.JOIN 문법

Koras02 2023. 2. 5. 21:39

JOIN

 

JOIN 문법은 FROM에서 2개 이상의 테이블을 

결합하여 다수의 행을 검색하는 것을 말합니다.

 

JOIN의 일반적인 문법으로는 

다음과 같습니다.

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 타입에 대한 설명은 

다음과 같습니다.

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

다음은 T6, T7 테이블의 INSERT JOIN 예제입니다.

T6 테이블의 num 값과 T7테이블에

 

num 값이같은 것을 INSERT JOIN

하여 출력합니다.

CREATE TABLE T6 (
     num integer PRIMARY KEY,    
     name varchar(5)
 );
    num  | name           
 --------+-----------                                                                                                       );                                                                                                                 num | name                                                                                                              --------------+-----------
       1 | a
       2 | b
       3 | c
       
CREATE TABLE T7(
    num integer PRIMARY KEY,
    value varchar(5)
);
num | value     //T2테이블
-----+-------
   1 | xxx
   3 | yyy
   5 | zzz

다음은 생성된 테이블에 각가의 값을

입력해 줍니다.

INSERT INTO T1 (num, name) VALUES 
    (1, xxx),
    (2, yyy),
    (3, zzz);
    
INSERT INTO T2 (num, name) VALUES 
    (1, a),
    (2, b),
    (5, c);

 

다음은 T6,T7 테이블의 INSERT JOIN 예제로

T6 테이블의 num 값과 T2 테이블의 num 값이 

같은 것을 INSERT JOIN 하여 출력합니다.

SELECT * 
   FROM T1 
  INNER JOIN T2 
      ON T1.num = T2.num;

 num | name | num | value
-----+------+-----+-------
   1 | xxx  |   1 | a
   3 | zzz  |   3 | b
(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 | xxx  | a
   2 | yyy  |
   3 | zzz  | b
(3 rows)

다음은 T1, T2 테이블의 RIGHT OUTHER 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 | xxx  |   1 | a
   3 | zzz  |   3 | b
     |      |   5 | c
(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 | xxx  |   1 | a
   2 | yyy  |     |
   3 | zzz  |   3 | b
     |      |   5 | c
(4 rows)

다음은 T1, T2 테이블의 CROSS JOIN 

예제로 CROSS JOIN은 T1, T2 테이블의

 

모든 행동은 JOIN 시킵니다.

결과는 두 테이블의 행의 개수를 

곱한 것과 같습니다.

 

SELECT * 
   FROM t1 
  CROSS JOIN t2;
 
 num | name | num | value
-----+------+-----+-------
   1 | xxx  |   1 | a
   1 | xxx  |   3 | b
   1 | xxx  |   5 | c
   2 | yyy  |   1 | a
   2 | yyy  |   3 | b
   2 | yyy  |   5 | c
   3 | zzz  |   1 | a
   3 | zzz  |   3 | b
   3 | zzz  |   5 | c
(9 rows)

 

참고 자료

 

JOIN

JOIN 문법 JOIN은 FROM에서 2개 이상의 테이블을 결합하여 다수의 행을 검색하는 것을 말합니다. JOIN의 일반적인 문법은 다음과 같습니다. ..

www.gurubee.net