📁 DataBase
[DB] JOIN
구동엽
2025. 2. 28. 14:55
JOIN?
- 두 개의 테이블을 하나로 병합하는 연산
1. EQUI JOIN
- Equal(=) 등식을 조건으로 사용할 때 발생하는 조인
- 컬럼 값이 정확하게 일치할 때에 성립하는 것으로 WHERE절의 조건이 등식인 경우 발생
2. Non EQUI JOIN
- WHERE절의 조건이 등식이 아닌 부등식(BETWEEN, >, >=, <, <=)을 사용해 범위를 나타낸 조건일 때 발생하는 조인
3. INNER JOIN
- 교집합의 개념으로 기준이 되는 키에 따른 컬럼값이 존재하는 것만 병합
ACTOR 테이블
ACTOR_NO | NAME | GENDER | GUARANTEE |
1235 | 홍길동 | 남 | 10,000,000 |
333 | 둘리 | 남 | 100,000,000 |
2295 | 또치 | 여 | 120,000,000 |
APPR 테이블
ACTOR_NO | MOVIE_NO | GUARANTEE |
1235 | 1001 | 30,000,000 |
2020 | 1002 | 30,000,000 |
333 | 1003 | 5,000,000 |
SELECT A1.ACTOR_NO AS ACT_NO1,
A2.ACTOR_NO AS ACT_NO2,
A2.MOVIE_NO,
A1.NAME,
A1.GENDER
FROM ACTOR A1 INNER JOIN APP2 A2
ON A1.ACTOR_NO = A2.ACTOR_NO;
결과
ACT_NO1 | ACT_NO2 | MOVIE_NO | NAME | GENDER |
1235 | 1235 | 1001 | 홍길동 | 남 |
333 | 333 | 1002 | 둘리 | 남 |
4. OUTER JOIN
- 합집합의 개념으로, 기준이 되는 키에 따른 컬럼값이 존재하지 않더라도 모든 튜블을 병합
- LEFT OUTER JOIN : 왼쪽 테이블의 모든 행을 포함시키면서 조인
- RIGHT OUTER JOIN : 오른쪽 테이블의 모든 행을 포함시키면서 조인
- FULL OUTER JOIN : 왼쪽 테이블의 모든 행과, 오른쪽 테이블의 모든 행을 포함하는 조인
4.1 LEFT OUTER JOIN
ACTOR 테이블
ACTOR_NO | NAME | GENDER | GUARANTEE |
1235 | 홍길동 | 남 | 10,000,000 |
333 | 둘리 | 남 | 100,000,000 |
2295 | 또치 | 여 | 120,000,000 |
APPR 테이블
ACTOR_NO | MOVIE_NO | GUARANTEE |
1235 | 1001 | 30,000,000 |
2020 | 1002 | 30,000,000 |
333 | 1003 | 5,000,000 |
SELECT A1.ACTOR_NO AS ACT_NO1,
A2.ACTOR_NO AS ACT_NO2,
A2.MOVIE_NO,
A1.NAME,
A1.GENDER
FROM ACTOR A1 LEFT OUTER JOIN APP2 A2
ON A1.ACTOR_NO = A2.ACTOR_NO;
결과
ACT_NO1 | ACT_NO2 | MOVIE_NO | NAME | GENDER |
1235 | 1235 | 1001 | 홍길동 | 남 |
333 | 1003 | 1003 | 둘리 | 남 |
2295 | NULL | NULL | 또치 | 여 |
4.2 RIGHT OUTER JOIN
ACTOR 테이블
ACTOR_NO | NAME | GENDER | GUARANTEE |
1235 | 홍길동 | 남 | 10,000,000 |
333 | 둘리 | 남 | 100,000,000 |
2295 | 또치 | 여 | 120,000,000 |
APPR 테이블
ACTOR_NO | MOVIE_NO | GUARANTEE |
1235 | 1001 | 30,000,000 |
2020 | 1002 | 30,000,000 |
333 | 1003 | 5,000,000 |
SELECT A1.ACTOR_NO AS ACT_NO1,
A2.ACTOR_NO AS ACT_NO2,
A2.MOVIE_NO,
A1.NAME,
A1.GENDER
FROM ACTOR A1 RIGHT OUTER JOIN APP2 A2
ON A1.ACTOR_NO = A2.ACTOR_NO;
결과
ACT_NO1 | ACT_NO2 | MOVIE_NO | NAME | GENDER |
1235 | 1235 | 1001 | 홍길동 | 남 |
NULL | 2020 | 1002 | 또치 | 여 |
333 | 333 | 1003 | 둘리 | 남 |
4.3 FULL OUTER JOIN
ACTOR 테이블
ACTOR_NO | NAME | GENDER | GUARANTEE |
1235 | 홍길동 | 남 | 10,000,000 |
333 | 둘리 | 남 | 100,000,000 |
2295 | 또치 | 여 | 120,000,000 |
APPR 테이블
ACTOR_NO | MOVIE_NO | GUARANTEE |
1235 | 1001 | 30,000,000 |
2020 | 1002 | 30,000,000 |
333 | 1003 | 5,000,000 |
SELECT A1.ACTOR_NO AS ACT_NO1,
A2.ACTOR_NO AS ACT_NO2,
A2.MOVIE_NO,
A1.NAME,
A1.GENDER
FROM ACTOR A1 FULL OUTER JOIN APP2 A2
ON A1.ACTOR_NO = A2.ACTOR_NO;
결과
ACT_NO1 | ACT_NO2 | MOVIE_NO | NAME | GENDER |
1235 | 1235 | 1001 | 홍길동 | 남 |
333 | 333 | 1003 | 둘리 | 남 |
2295 | NULL | NULL | 또치 | 여 |
NULL | 2020 | 1002 | NULL | NULL |
5. NATURAL JOIN
- 조인의 대상이 되는 두 테이블에서 같은 이름의 칼럼에 대해서는 동일한 칼럼을 가지는 행만 병합
- 즉, 같은 칼럼에 같은 값만이여야함
ACTOR 테이블
ACTOR_NO | NAME | GENDER | GUARANTEE |
1235 | 홍길동 | 남 | 10,000,000 |
333 | 둘리 | 남 | 100,000,000 |
2295 | 또치 | 여 | 120,000,000 |
APPR 테이블
ACTOR_NO | MOVIE_NO | GUARANTEE |
1235 | 1001 | 10,000,000 |
2020 | 1002 | 30,000,000 |
333 | 1003 | 5,000,000 |
SELECT *
FROM ACTOR NATURAL JOIN APPR;
ACTOR_NO | GUARANTEE | NAME | GENDER | MOVIE_NO |
1235 | 10,000,000 | 홍길동 | 남 | 1001 |
6. CROSS JOIN
- 왼쪽 테이블의 각 행에 대한 오른쪽 테이블 모든 행의 대응을 조합하여 결과를 출력
- 왼쪽 테이블이 M행이고 오른쪽 테이블이 N행이면 CROSS JOIN의 결과는 M*N행(카테시안 곱)