[DB] 조인

mingsso·2023년 11월 11일
0

CS

목록 보기
10/30
post-thumbnail
post-custom-banner

1️⃣ 개념

두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것으로, 데이터 조회 시 다른 테이블의 데이터를 함께 조회해야할 때 사용함



2️⃣ 종류

내부조인 (Inner Join)

가장 기본적인 조인으로, 두 테이블의 교집합을 나타냄
ON의 조건에 맞는 공통된 부분이 있는 경우만 출력

  • 동등 조인 (EQUI Join): 동등 비교(=) 사용
    SELECT * FROM employees
    INNER JOIN dept_emp
    ON employees.emp_no = dept_emp.emp_no;

    SELECT * FROM employees, dept_emp
    WHERE employees.emp_no = dept_emp.emp_no;

  • 자연조인 (Natural Join): 별도의 조인 조건 없이 테이블이 가지고 있는 공통 컬럼 이름을 매개체로 연결함
	SELECT * FROM employees 
    NATURAL JOIN dept_emp;

  • 비등가 조인 (Non-Equi Join): 등호(=) 외의 조건(>, <, >=, <= 등)을 사용하여 조인하는 것
    SELECT * FROM employees, departments
    WHERE emplyees.emp_no between 10003 and 10004;



외부조인 (Outer Join)

내부 조인과 달리, 두 테이블 간의 조건에 맞지 않는 행도 결과에 포함시킴

  • Left (Outer) Join: 좌측 테이블의 모든 결과값 포함
    SELECT * FROM table1
    LEFT OUTER JOIN table2
    ON table1.n = table2.n;

  • Right (Outer) Join: 우측 테이블의 모든 결과값 포함
    SELECT * FROM table1
    RIGHT OUTER JOIN table2
    ON table1.n = table2.n;



셀프 조인 (Self Join)

동일 테이블 사이의 조인
같은 테이블끼리 조인하는 것이므로 별칭(Alias)을 꼭 사용해야 함

-- 사원번호를 통해 관리자와 사원이 관리되고 있는 테이블에서
-- 셀프조인을 사용해 자신의 관리자와 바로 위 차상위 관리자를 구할 수 있음
SELECT E1.EMPNO 사원, E1.MGR 관리자, E2.MGR 차상위_관리자
FROM EMP E1, EMP E2
WHERE E1.MGR = E2.EMPNO



교차 조인 (Cross Join)

두 테이블을 카디션 프로덕트(곱집합)한 결과, 특별한 조건 없이 테이블 A의 각 행과 B의 각 행을 다 조합한 결과

SELECT * FROM employees 
CROSS JOIN dept_emp;

SELECT * FROM employees, dept_emp;



3️⃣ 조인 수행 원리

중첩 루프 조인(NL, Nested Loop Join)

중첩 반복문과 유사한 방식으로 조인을 수행함

  • 반복문의 외부에 있는 테이블을 선행 테이블(외부 테이블)이라 함
  • 반복문의 내부에 있는 테이블을 후행 테이블(내부 테이블)이라 함
  • 추출 버퍼는 SQL문의 실행 결과를 보관하는 버퍼
  • 즉, 선행 테이블의 조건을 만족하는 행을 추출하여 후행 테이블을 읽으면서 조인을 수행함
  • 결과 행의 수가 적은 테이블을 조인 순서 상 선행 테이블로 선택하는 것이 비용을 줄일 수 있음
  • 랜덤 방식으로 데이터를 액세스하기 때문에, 대용량 테이블에서는 사용하지 않음

정렬 병합 조인 (Sort Merge Join)

조인키를 기준으로 데이터를 정렬하여 조인을 수행함

  • 스캔 방식으로 데이터를 액세스하며, 인덱스를 사용하지 않음
  • 정렬할 데이터가 많은 경우 임시 영역(디스크)을 사용하기 때문에 성능이 떨어질 수 있음
  • 해시 조인과 달리, 동등 조인 뿐만 아니라 비동등 조인에 대해서도 조인 작업이 가능함

  1. 선행 테이블에서 조건을 만족하는 행을 찾음
  2. 선행 테이블의 조인키(테이블들을 연결하는 데 사용되는 열)를 가지고 정렬함
  3. 후행 테이블에서 조건을 만족하는 행을 찾음
  4. 후행 테이블의 조인키를 가지고 정렬함
  5. 정렬된 결과를 이용하여 조인함
  6. 조인이 성공하면 추출 버퍼에 삽입함

해시 조인 (Hash Join)

해싱 기법을 이용하여 조인을 수행함

  • 조인을 수행할 테이블의 조인키를 기준으로 해시 함수를 실행하며, 인덱스를 사용하지 않음
  • 대량의 조인 작업이 필요할 때 사용하면 좋음
  • 동등 조인에서만 사용 가능함
  • 해시 테이블을 메모리에 생성해야 하고, 크기가 클 경우 임시 영역에 저장하기 때문에 결과 행의 수가 적은 테이블을 선행 테이블로 사용하는 것이 좋음

  1. 선행 테이블에서 조건을 만족하는 행을 찾음
  2. 선행 테이블의 조인키를 기준으로 해시 함수를 적용하여 해시 테이블을 생성함
  3. 후행 테이블에서 조건을 만족하는 행을 찾음
  4. 후행 테이블의 조인키를 기준으로 해시 함수를 적용하여 해시 테이블을 생성함
  5. 조인에 성공하면 추출 버퍼에 삽입함






참고자료

https://advenoh.tistory.com/23
https://velog.io/@newdana01/Database-테이블-조인-이해하기
https://hongcoding.tistory.com/146
[책] 면접을 위한 cs 전공지식노트
https://m.blog.naver.com/isaac7263/222117156620
https://eehoeskrap.tistory.com/84
https://hyyoo89.tistory.com/entry/조인-종류-및-수행원리

profile
🐥👩‍💻💰
post-custom-banner

0개의 댓글