Computer Science/데이터베이스

데이터베이스 JOIN

eunnnn 2023. 3. 26. 20:38

데이터베이스 JOIN이란

  • 둘 이상의 테이블을 연결해서 테이블을 검색하는 방법
  • 두 릴레이션으로부터 관련된 튜플들을 결합하여 하나의 튜플로 만드는 가장 대표적인 데이터 연결 방법이다.

jOIN의 종류는 INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN이 있다.

다음의 두 테이블을 예시로 조인에 대해 알아보겠다.

 

INNER JOIN

INNER JOIN은 위의 그림처럼 두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인 방식으로, 공통 존재 컬럼의 값이 같은 경우를 추출하는 것을 말한다.

가장 일반적인 조인으로, 조인 사용시 명령어로 INNER JOIN 대신 JOIN 만을 입력해도 INNER JOIN이 사용된다.

기본적으로 SQL문은 다음의 형태를 띈다.

SELECT A.컬럼1, A.컬럼2 , ... , B.컬럼1
FROM 테이블1 A (INNER)JOIN 테이블2 B
ON 조인조건
WHERE 검색조건

ex)
SELECT Star.Name, Dep.DepName
From Star JOIN Dep ON Star.DepNo = Dep.DepNo

위의 데이터베이스를 INNER JOIN한 결과는 다음과 같다.

Star테이블과 Dep테이블 중에서 Star의 DepNo와 Dep의 DepNo가 일치하는 요소들만 골라서 출력 된 모습을 확인할 숭 있다. 특히 Star 테이블의 이병헌과 Dep 테이블의 이경규가 간다는 각각 DepNo가 일치하는 요소가 없었기 때문에 출력되지 않았음을 확인할 수 있다.

 

 

OUTER JOIN

NULL값이나 공통된 부분이 없는 데이터도 함께 출력하고 싶은 경우에 사용하는 것이 OUTER JOIN이다.

OUTER JOIN은 Left Outer Join, Right Outer Join, Full Outer Join으로 나눌 수 있다.

 

LEFT JOIN은 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터를 추출하는 방식이다.

SELECT Star.Name, Dep.Name
FROM Star LEFT JOIN Dep
ON Star.DepNo = Dep.DepNo

위의 데이터베이스를 LEFT JOIN한 결과는 다음과 같다.

Star의 DepNo와 Dep의 DepNo가 일치하는 요소와, Star 테이블에만 있는 요소가 DepName에 NULL값이 들어간 채로 출력된 모습을 확인할 수 있다.

RIGHT OUTER JOIN 은 LEFT와는 반대로 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 데이터를 추출하는 방식이다. 어떤 테이블이 선택되는 지만 다르므로 설명은 생략하겠다.

 

만약 아래 사진과 같이 공통된 부분마저 제외하고 왼쪽에만 있는 것을 출력하고 싶다면 어떻게 해야할까?

정답은 NULL을 이용하여 JOIN된 결과에서 조인조건의 대상이 되는 컬럼이 NULL인 것을 찾으면 된다.

SELECT Star.Name, Dep.Name
From Star LEFT JOIN Dep
ON Star.DepNo = Dep.DepNo
WHERE Star.DepNo IS NULL

 

FULL OUTER JOIN은 양쪽의 모든 데이터를 추출하는 방식이다.

즉, LEFT OUTER JOIN과 RIGHT OUTER JOIN의 결과값을 합친 것이라고 볼 수 있다.

SELECT Star.Name, Dep.Name
FROM Star 
FULL OUTER JOIN Dep ON Star.DepNo = Dep.DepNo

위의 데이터베이스를 OUTER JOIN한 결과는 다음과 같다.

 

CROSS JOIN

CROSS JOIN이란 조인 조건이 없는 모든 데이터 조합을 추출하는 방식이다. (가능한 모든 경우의 수를 전부 표현하는 것) 즉 카디널리티 곱을 수행 한 결과값을 의미한다.

SELECT Star.Name, Dep.DepName
FROM Star CROSS JOIN Dep

실행 결과 값은 아래와 같은데, 모든 행들이 서로 교차되어 곱해져있는 모습을 볼 수 있다.

그래서 Star 테이블(7행) x Dep 테이블(4행) = 총 28행으로 테이블이 구성된다.

 

SELF JOIN

자기 자신을 JOIN하는 방법으로, 자신에게 별칭을 지정한 후 다시 조인하는 방식이다.

SELF JOIN 이 필요한 경우는 다음과 같다.

위의 A 테이블을 보면 각각의 스타의 ID와 이름, Partner의 번호가 부여되어 있다. 이 때, Partner의 번호 대신 이름을 알고 싶다면 자신을 JOIN해서 이름을 알 수 있다.

SELECT A.ID, A.Name, A.Partner, B.Partner PartName
FROM Star A JOIN Star B 
ON A.Partner = B.ID

그래서 결과값은 다음과 같다.

 

 

출처