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)
참고 자료
'백엔드 > PostgresQL' 카테고리의 다른 글
[PostgreSQL] Postgresql 강좌 - 8.DML (0) | 2023.01.10 |
---|---|
[PostgreSQL] Postgresql 강좌 - 7.SELECT 문법 (0) | 2023.01.09 |
[PostgreSQL] Postgresql 강좌 - 6. 테이블 관리 (생성,변경, 삭제) (0) | 2022.04.10 |