📁 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행(카테시안 곱)