JOIN (조인)

이유석·2022년 3월 28일
0

CS - Data Base

목록 보기
3/11
post-thumbnail

JOIN (조인)

정의

  • 여러 테이블을 연결 또는 결합하여 데이터를 출력하는 것 입니다.
  • 일반적으로 PK(기본 키)나 FK(외래 키)의 연관성에 의해 성립 됩니다.

종류

  • (INNER) JOIN → 교집합
  • LEFR (OUTER) JOIN → 부분집합
  • RIGHT (OUTER) JOIN → 부분집합
  • FULL (OUTER) JOIN → 합집합
  • CROSS JOIN → 모든 경우의 수
  • SELF JOIN → 동일 테이블

2가지 테이블 (A, B)가 있다고 가정 후 여러 JOIN들에 대하여 학습해보겠습니다.
TABLE_A

IDENAME
1AAAA
2BBBB
3CCCC

TABLE_B

IDKNAME
1
2
4
5

(INNER) JOIN

  • 교집합으로, JOIN 조건에서 동일한 값이 있는 행만 반환
  • 만약 INNER JOIN 표시가 있다면 WHERE 절에서 사용하던 JOIN 조건을 FROM 절에 사용하겠다라는 뜻을 가짐
  • USING, ON 조건절을 필수적으로 사용해야 함(INNER JOIN 키워드를 사용할 경우)
  • INNER 키워드 생략 가능, INNER JOIN을 통째로 생략도 가능.
IDENAMEKNAME
1AAAA
2BBBB
SELECT
A.ID, A.ENAME, B.KNAME
FROM TABLE_A AS A INNER JOIN TABLE_B AS B 
	ON A.ID = B.ID

고전적인 WHERE의 INNER JOIN문

SELECT
A.ID, A.ENAME, B.KNAME
FROM TABLE_A AS A, TABLE_B AS B 
WHERE A.ID = B.ID

LEFT (OUTER) JOIN

  • 부분 집합으로, JOIN 조건에서 동일한 값 뿐만 아니라 동일한 값이 없더라도 왼쪽 테이블의 값을 포함하여 반환
  • A,B 테이블간 조인 조건이 맞지 않는 A와B 테이블의 레코드 중 A테이블 레코드는 무조건 결과값에 포함되어 나오는 것입니다.
IDENAMEKNAME
1AAAA
2BBBB
3CCCCNULL
SELECT A.ID, A.ENAME, B.KNAME
FROM TABLE_A AS A LEFT OUTER JOIN TABLE_B AS B
	ON A.ID = B.ID

  • JOIN 조건에서 동일한 값이 없는 왼쪽 테이블의 값만 포함하여 반환
  • A - B
IDENAMEKNAME
3CCCCNULL
SELECT A.ID, A.ENAME, B.KNAME
FROM TABLE_A AS A LEFT OUTER JOIN TABLE_B AS B
	ON A.ID = B.ID
WHERE B.ID IS NULL

RIGHT (OUTER) JOIN

  • 부분 집합으로, JOIN 조건에서 동일한 값 뿐만 아니라 동일한 값이 없더라도 오른쪽 테이블의 값을 포함하여 반환
  • A,B 테이블간 조인 조건이 맞지 않는 A와B 테이블의 레코드 중 B테이블 레코드는 무조건 결과값에 포함되어 나오는 것입니다.
IDENAMEKNAME
1AAAA
2BBBB
4NULL
5NULL
SELECT A.ID, A.ENAME, B.KNAME
FROM TABLE_A AS A RIGHT OUTER JOIN TABLE_B AS B
	ON A.ID = B.ID

  • JOIN 조건에서 동일한 값이 없는 오른쪽 테이블의 값만 포함하여 반환
  • B - A
IDENAMEKNAME
4NULL
5NULL
SELECT A.ID, A.ENAME, B.KNAME
FROM TABLE_A AS A RIGHT OUTER JOIN TABLE_B AS B
	ON A.ID = B.ID
WHERE A.ID IS NULL

FULL (OUTER) JOIN

  • 합집합을 말한다.
  • JOIN 조건시 양 쪽테이블의 모든 내용이 포함되어 반환된다.
IDENAMEKNAME
1AAAA
2BBBB
3CCCCNULL
4NULL
5NULL
SELECT A.ID, A.ENAME, B.KNAME
FROM TABLE_A AS A FULL OUTER JOIN TABLE_B AS B
	ON A.ID = B.ID

  • FULL OUTER 가 가지고 있는 것 중 공통적인 부분을 제외한 값
IDENAMEKNAME
3CCCCNULL
4NULL
5NULL
SELECT A.ID, A.ENAME, B.KNAME
FROM TABLE_A AS A FULL OUTER JOIN TABLE_B AS B
	ON A.ID = B.ID
WHERE A.ID IS NULL OR B.ID IS NULL

CROSS JOIN

  • PRODUCT 개념으로 테이블 간 JOIN조건이 없는 경우, 생길 수 있는 모든 데이터의 조합을 뜻함
IDENAMEIDKNAME
1AAAA1
1AAAA2
1AAAA4
1AAAA5
2BBBB1
2BBBB2
2BBBB4
2BBBB5
3CCCC1
3CCCC2
3CCCC4
3CCCC5
  • 왼쪽 테이블의 데이터 1개당 오른쪽 테이블 데이터를 처음부터 끝까지 하나씩 결합한다.
  • 그리고 왼쪽의 데이터가 없어질 때까지 반복한다.
SELECT A.ID, A.ENAME, B.ID, B.KNAME
FROM TABLE_A AS A CROSS JOIN TABLE_B AS B

SELF JOIN

  • 자기자신과 자기자신을 조인하는 것이다.
  • 하나의 테이블을 여러번 복사해서 조인한다고 생각하면 편하다.
  • 자신이 갖고 있는 칼럼을 다양하게 변형시켜 활용할 때 자주 사용한다.

SELECT A.NAME, B.AGE 
FROM EX_TABLE AS A INNER JOIN EX_TABLE AS B
profile
https://github.com/yuseogi0218

0개의 댓글