JOIN 개념
- 테이블이 두 개 이상인 경우 테이블을 합치거나 정보를 조합해야 할 때 사용하는 방법이다.
- JOIN 자체가 테이블의 전체 데이터를 사용하는 연산이므로 메모리와 연산 부담이 큰 편이다.
- JOIN을 위한 조건
- 2개의 테이블 (left, right)
- 값을 비교하기 위한 1개 또는 그 이상의 column(2개의 테이블에 공통 존재)
- 원하는 결과를 도출하기 위한 JOIN Expression
- JOIN Type(방법)
- JOIN 결과로 새로운 테이블이 생성된다.
- 기준 column을 기준으로 원본과 대상 테이블의 column과 records가 하나의 테이블에 모두 표시된다.
- JOIN기법에 따라 한쪽에만 column이 존재하는 경우, record는 null로 표시된다.
JOIN 기법
구분 |
내용 |
비고 |
Inner |
2개의 테이블에서 Key 컬럼의 레코드가 일치 |
양쪽 테이블의 Column 모두 포함 |
(Full) Outer |
2개의 테이블에서 Key 컬럼의 레코드가 일치하거나 한쪽에만 존재 |
한쪽에만 존재하는 컬럼의 레코드는 null로 표시 |
Left Outer |
- 왼쪽 테이블을 기준으로 key column의 레코드가 오른쪽 테이블에 존재 |
|
- 오른쪽 테이블에만 존재하는 레코드는 제외 | 오른쪽 테이블에 없는 레코드는 null로 표시 |
| Right Outer | Left Outer와 동일하며 방향만 반대 | 왼쪽 테이블에 없는 레코드는 null로 표시 |
| Crosss
(or Cartesian) | 양쪽 테이블의 모든 Row 매치 (데이터 양의 explosion발생) | 1,000 row * 500 row = 500,000 row
(가급적 사용 지양) |
예제 데이터 생성
- join할 2개의 테이블을 생성하고 값을 넣는다.
-- 1st table
CREATE TABLE team (
num integer PRIMARY KEY,
name varchar(25));
-- 2nd table
CREATE TABLE team_code (
num integer PRIMARY KEY,
value varchar(5));
---- value insert
-- 1st table
INSERT INTO team (num, name) VALUES
(1, 'Human Resource'),
(2, 'Finance'),
(3, 'Infra Service');
-- 2nd table
INSERT INTO team_code (num, value) VALUES
(1, 'HR'),
(2, 'FIN'),
(5, 'DEV');
INNER JOIN
- 2개의 테이블에서 Key Column의 레코드가 일치하는 결과를 반환한다.
SELECT * FROM team
INNER JOIN team_code
ON team.num = team_code.num;
LEFT OUTER JOIN
- 왼쪽 테이블을 기준으로 Key Column의 레코드가 오른쪽 테이블에 존재하는 결과만 반환한다. 오른쪽 테이블에만 존재하는 레코드는 제외된다.
SELECT * FROM team
LEFT JOIN team_code
USING (num);
RIGHT OUTER JOIN
- 오늘쪽 테이블을 기준으로 Key Column의 레코드가 왼쪽 테이블에 존재하는 결과만 반환한다. 왼쪽 테이블에만 존재하는 레코드는 제외된다.