[데이터베이스] - Join

링딩·2023년 3월 27일
0

Computer Science

목록 보기
14/49
post-thumbnail


✨관계형 데이터베이스의 조인 (join)

* 정의 : 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것

=> "테이블로서 저장되거나, 그 자체로 이용할 수 있는 결과 셋을 만들어 낸다."


◽ 왜 필요한가?

  • 테이블끼리는 관계를 맺는다
    => 저장 공간의 효율성과 확장성이 향상성을 위해
  • 각 테이블에 저장된 데이터를 효과적으로 검색하기 위해
    => 관계있는 데이터가 여러 테이블로 나뉘어 저장되므로 필요하다.

조인의 종류

조인의 예시로 쓰일 테이블 두 개

[Star 테이블]

[Dep 테이블]


1. 내부조인(INNER JOIN)

  • 가장 흔한 결합 방식이자 기본 조인 형식

  • 조인 구문에 기반한 2개의 테이블(A, B)의 굥통된 요소들을 통해 결합함
    => 새로운 결과 테이블을 생성

  • 공통된 데이터가 없다면 해당 행은 누락


[명시적 조인 표현]

SELECT * FROM employee INNER JOIN department ON employee.DepartmentID = department.DepartmentID;

이런 식으로 쓰인다.



2. OUTER JOIN

  • 공통된 부분이 없는 데이터도 함께 보여주는 조인
  • 다른 비교 연산자(<와 같은)를 사용하는 것은 ❌

2-1. LEFT JOIN

  • 공통된 값 + 왼쪽 테이블에만 있는 값이 출력

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

+) 추가적

여기서 공통된 부분마저 제외하고자( 즉 왼쪽만) 한다면, 위의 쿼리에서 Null 조건을 추가해주면 된다.

+) Q. where에 있는 조건이 on으로 갔을 때 결과가 어떻게 나오는가?

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


2-2. RIGHT JOIN

  • 공통적인 부분 + 오른쪽에 있는 것만 출력

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

[결과]



2.3 FULL OUTER JOIN

  • A테이블이 가지고 있는 것 + B 테이블이 가지고 있는 것 모두
  • Mysql에서는 지원하지 않음(UNION을 써서 만들자)

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

[결과]

=> 위의 LEFT OUTER 조인 + RIGHT OUTER 조인 둘을 합친 것


3. CROSS JOIN(크로스 조인)

  • 두 테이블 간의 가능한 모든 경우의 수에 대한 결과
  • 카디널리티 곱
SELECT Star.Name, Dep.DepName
FROM Star CROSS JOIN Dep

=> 즉 모든 결과에 대한 곱이 나온다고 생각하자
(모든 경우의 수 = Star테이블(7행) x Dep테이블(4행) = 28 행)


4. SELF JOIN

  • 자기 자신을 참조 (본인 자체를)
    -> 같은 테이블 내에 원하는 정보가 존재하므로

[SELF JOIN 을 하고자 하는 테이블]

[쿼리 실행]

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

본인의 원하는 컬럼을 '자체 조인' 하여 만들었다.

  • 어떻게? 😮
    =>Partner의 정보도 같은 테이블 내에 존재하기 때문


출처

홍코딩님의 글을 참조하여 작성하였습니다.

profile
초짜 백엔드 개린이

0개의 댓글